当前位置: 首页 > 知识库问答 >
问题:

Symfony4-函数App\Manager\ImageManager:的参数太少:。\uu construct(),传递了0个参数,预期正好是1个参数

姬乐
2023-03-14

我试图在我的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' }

共有2个答案

冉永宁
2023-03-14

通过@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' }
章阳波
2023-03-14

您正在添加一种类型的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,但发现了错误。