程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Symfony @Paramconverter 通过自动装配大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Symfony @Paramconverter 通过自动装配?

开发过程中遇到Symfony @Paramconverter 通过自动装配的问题如何解决?下面主要结合日常开发的经验,给出你关于Symfony @Paramconverter 通过自动装配的解决方法建议,希望对你解决Symfony @Paramconverter 通过自动装配有所启发或帮助;

我正在将 Symfony 3.3 升级到 4.4,几乎已经完成,但我还有最后一个问题。 我使用默认配置启用了自动装配,但整个项目使用了大量没有注释的 @ParamConverter 转换。

问题:带有 auto_convert 的 ParamConverter 试图通过自动装配(而不是实体)的类型提示将提到的服务和类转换给控制器。

控制器:

    /**
     * @Route("/report",name="report_page")
     */
    public function report(
        request $request,fileManager $fileManager
    ): Response {
        // code
    }

错误:

The class 'App\service\fileManager' was not found in the chain configured namespaces App\Entity.

服务“App\service\fileManager”存在并且工作正常。

ParamConverter 配置(默认为 'request: {Converters: true,auto_convert: truE}'):

sensio_framework_extra:
    router:
        Annotations: false

教义配置:

doctrine:
    dbal:
        default_connection: default
        connections:
            default:
            # config
    orm:
        auto_generate_proxy_classes: '%kernel.deBUG%'
        naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
        auto_mapPing: true
        mapPings:
            Base:
                is_bundle: false
                type: Annotation
                dir: '%kernel.project_dir%/src/Entity'
                prefix: App\Entity

控制器设置(services.yaml):

services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: false  
    App\:
        resource: '../src/*'
        exclude: '../src/{DataFixtures,Entity,Objects,Repository,Utils}'
    App\Controller\:
        resource: '../src/Controller'
        Tags: ['controller.service_arguments']

我知道我可以将 'sensio_framework_extra.request.auto_convert' 设置为 false 并在控制器中的任何地方使用 @ParamConverter 注释,但是这种转换的地方太多,我尝试获得默认行为,因此额外的 @ParamConverter 注释会额外。 以防万一:我尝试禁用 auto_convert 并且一切正常(服务被自动装配并且实体被传递给控制器​​)​​。

我还检查了我是否安装了最新可用版本的软件包和捆绑包。

需要一些提示。可能我错过了什么。我试图找到 ParamConverter 在默认情况下如何工作的确切方式,以及它如何检查该类是否为实体,但它太复杂了,我决定我挖得太深了。

编辑: 可能我对自动装配的配置有一些问题,而不是参数转换器。但我检查了 php bin/console deBUG:autowiring 并通过自动装配获得了所有需要的服务。

解决方法

看起来 symfony 正在尝试像实体一样转换 fileManager

尝试将注入的服务移动到控制器的 __construct 方法中(并将属性添加到控制器中),例如:

private $fileManager;

...

public function __construct(FileManager $fileManager) {
    $this->fileManager = $fileManager;
}

然后在 report 方法中访问它:

$this->fileManager

大佬总结

以上是大佬教程为你收集整理的Symfony @Paramconverter 通过自动装配全部内容,希望文章能够帮你解决Symfony @Paramconverter 通过自动装配所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: