【问题标题】:Symfony3.4: Attempted to call an undefined method named "getParameter" of class "Symfony\Component\DependencyInjection\ServiceLocator"Symfony3.4:试图调用类“Symfony\Component\DependencyInjection\ServiceLocator”的名为“getParameter”的未定义方法
【发布时间】:2021-02-09 03:22:47
【问题描述】:

在 Symfony3.4 中,支持自动布线时出现以下错误。
即使移除容器也会出现以下错误,只是更改类。
由于另一个错误,我将控制器更改为抽象控制器,所以我想尽可能使用抽象控制器。
有什么我忘记了吗?

https://symfony.com/doc/3.4/service_container/3.3-di-changes.html

错误

Attempted to call an undefined method named "getParameter" of class "Symfony\Component\DependencyInjection\ServiceLocator".

控制器.php

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class DefaultController extends AbstractController
{
    /**
     * @param KeepRequestService $keepRequestService
     * @return array
     */
    private function getKeepRequestSummary(KeepRequestService $keepRequestService): array
    {
        $summary = array();
        
        //Error line        
        foreach (array_keys($this->container->getParameter('keep_request_status')) as $status) {

            $params = array('status' => $status);
            $summary[$status] = $keepRequestService->countKeepRequestBySearchParams($params);
        }
        return $summary;
    }

services.yml

    _defaults:
        autowire: true
        autoconfigure: true
        public: false

    App\:
        resource: '../../src/*'
        exclude: '../../src/{Ahi/Sp/AdminBundle/Model/Entity, Ahi/Sp/AdminBundle/Model/Repository, Ahi/Sp/AdminBundle/Resources/public/uploadify, Ahi/Sp/AdminBundle/Ahi/Sp/PublicBundle/ }'

    App\Ahi\Sp\AdminBundle\Controller\:
        resource: '../../src/Ahi/Sp/AdminBundle/Controller'
        public: true
        tags: ['controller.service_arguments']

【问题讨论】:

  • 您尝试过吗:stackoverflow.com/a/49084402/8411841 注入和使用容器现在是不好的做法。应该注入参数和服务。
  • @Vyctorya 感谢您的评论。多亏了你,我才能解决它。

标签: php symfony


【解决方案1】:

按照 Vyctorya 的建议,我将代码修改如下,代码消失了。

控制器.php

    /**
     * @var array
     */
    private $keepRequestStatus;

    public function __construct(array $keepRequestStatus)
    {
        $this->keepRequestStatus = $keepRequestStatus;
    }
   private function getKeepRequestSummary(KeepRequestService $keepRequestService)
    {
        $summary = array();
        foreach (array_keys($this->keepRequestStatus) as $status) {
            $params = array('status' => $status);
            $summary[$status] = $keepRequestService->countKeepRequestBySearchParams($params);
        }
        return $summary;
    }

services.yml

services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: false
        bind:
          $keepRequestStatus: '%keep_request_status%'

【讨论】:

    猜你喜欢
    • 2017-04-19
    • 2017-09-21
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    相关资源
    最近更新 更多