我试图在我的services.yaml中为ImageManager.php获取一个参数,但它不起作用,我无法解决此错误。
错误是这样的:
类型错误:参数太少,无法运行App\Manager\ImageManager::__construct(),0在C:\wamp64\www\SymfonyAPI\var\ache\dev\ContainerZxFSS5S\getImageManagerService.php第14行,预期为1
服务.亚马尔
parameters:
images_directory: '%kernel.project_dir%/public/uploads/images/'
...
services:
_defaults:
autowire: false
autoconfigure: false
public: true
App\Manager\ImageManager:
arguments:
$targetDir: '%images_directory%'
如果是自动连线
运行时异常无法自动连接服务"App\Manager\ImageManager":方法"__construct()"的参数"$Target etDir"具有类型"App\Manager\Target etDir",但未找到此类。
ImageManager.php
private $targetDir;
public function __construct(targetDir $targetDir)
{
$this->targetDir = $targetDir;
}
全方位服务
parameters:
liip_imagine.mozjpeg.binary: /mozjpeg/cjpeg.exe
images_directory: '%kernel.project_dir%/public/uploads/images/'
mozjpg_directory: '%kernel.project_dir%/mozjpg'
locale: 'en'
services:
_defaults:
autowire: false
autoconfigure: false
public: true
App\Manager\ImageManager:
arguments:
$targetDir: '%images_directory%'
App\EventListener\ImageUploadListener:
tags:
- { name: doctrine.event_listener, event: prePersist }
- { name: doctrine.event_listener, event: preUpdate }
App\:
resource: '../src/*'
exclude: '../src/{Entity,Migrations,Tests,Kernel.php}'
App\Controller\:
resource: '../src/Controller'
tags: ['controller.service_arguments']
app.post_processor.my_custom_post_processor:
class: '%kernel.project_dir%/src/Controller/ImageController.php'
tags:
- { name: 'liip_imagine.filter.post_processor', post_processor: 'mozjpeg' }
通过@kunicmarko20澄清答案
您的服务构造函数需要一个App\Manager\targetDir
对象作为$targetDir
参数,但您正在为服务提供一个字符串作为$targetDir
参数。
您需要将服务构造函数更改为如下之一。
PHP7.x
public function __construct(string $targetDir)
PHP 5. x
public function __construct($targetDir)
使用配置更改进行更新
第二个问题是在服务类目录上启用了原型。这将导致Symfony使用原型服务定义覆盖手动服务定义。
因此,会发生的情况是手动服务定义被创建,然后被自动配置的定义覆盖。
原型定义是
App\:
resource: '../src/*'
exclude: '../src/{Entity,Migrations,Tests,Kernel.php}'
因为它低于您的手动服务定义,所以Symfony使用它代替您的手动定义。
比如如果我写
services:
AppBundle\MyDirectory\Object:
parameters: ['a']
AppBundle\MyDirectory\Object:
parameters: ['b']
symfony用作服务定义的最终结果将是。
new AppBundle\MyDirectory\Object('b');
您应该将services.yml更改为以下内容:
parameters:
liip_imagine.mozjpeg.binary: /mozjpeg/cjpeg.exe
images_directory: '%kernel.project_dir%/public/uploads/images/'
mozjpg_directory: '%kernel.project_dir%/mozjpg'
locale: 'en'
services:
_defaults:
autowire: false
autoconfigure: false
public: true
App\:
resource: '../src/*'
exclude: '../src/{Entity,Migrations,Tests,Kernel.php}'
App\Controller\:
resource: '../src/Controller'
tags: ['controller.service_arguments']
#... Your manual service definitions below here.
App\Manager\ImageManager:
arguments:
$targetDir: '%images_directory%'
App\EventListener\ImageUploadListener:
tags:
- { name: doctrine.event_listener, event: prePersist }
- { name: doctrine.event_listener, event: preUpdate }
app.post_processor.my_custom_post_processor:
class: '%kernel.project_dir%/src/Controller/ImageController.php'
tags:
- { name: 'liip_imagine.filter.post_processor', post_processor: 'mozjpeg' }
您正在添加一种类型的Target etDir
,您的应用程序认为这是某种类,您可以在错误中看到类型为App\Manager\Target etDir,但未找到该类。代码>与字符串
如果你是在PHP 7或不把任何东西作为一个类型,它将工作,即使你有autowire真/假,因为:
App\Manager\ImageManager:
arguments:
$targetDir: '%images_directory%'
需要连接到多个数据库,并遵循Symfony文档中关于此问题的说明。 我创建了多个条令连接和orm实体管理器,并禁用了自动布线。 我的services.yaml文件如下所示 不幸的是,我在尝试访问登录页面时收到以下错误。 此处列出了它所指的LoginFormAuthenticator,它需要连接到用户信息(用户名,pw)所在的lc_用户连接。我将需要其他连接来获取客户端数据。 我相信我需要添加一些东
当我将数据发送到MySQL数据库时,我在上遇到了这个错误 此错误: 函数App\Http\Controllers\Auth\LoginController::authenticated()的参数太少,在C:\xampp\htdocs\codecrowne\vendor\laravel\framework\src\light\Foundation\Auth\AuthenticatesUsers.ph
看两个例子: a = 1 def fun(a): a = 2 fun(a) print a # 1 a = [] def fun(a): a.append(1) fun(a) print a # [1] 所有的变量都可以理解是内存中一个对象的“引用”,或者,也可以看似c中void*的感觉。 通过id来看引用a的内存地址可以比较理解: a = 1 def fun(a): prin
我正在尝试为用户设置策略。然而,我不断得到一个错误: 太少的参数功能应用\政策\用户政策::更新(),1传递 /vendor/laravel/framework/src/Illuminate/Auth/Access/Gate.php在第481行,正好2预期(视图: /resources/views/users/index.blade.php) 错误异常 /app/Policies/UserPoli
问题内容: 我试图通过Python模块进行控制。 我想为当前的运行时以及永久配置添加一个IP地址到受信任的区域。 以下是dbus界面的文档:http : //manpages.ubuntu.com/manpages/wily/man5/firewalld.dbus.5.html 什么有效:运行时配置 我可以将其添加到运行时配置中: 很简单 什么不起作用:永久配置 事实证明,将其添加到永久配置中比较
我会收到错误消息: 现在,我的docker版本是17.06,根据这一页,[docker:“build”需要一个参数。参见'docker build--help',我应该可以指定一个位于不同目录下的Dockerfile,所以我不知道问题是什么。 编辑:我通过以下操作创建了符号链接: 我想我不需要把。最后,由于我用-f指定了Dockerfile,但发现了错误。