在我的bundle中,我需要在控制器的构造函数中初始化我的doctrine manager类(作为服务并使用ManagerRegistry),但symfony仍然会抛出此异常:
类型错误:函数AdminBundle \ Controller \ RegistraceController :: __ construct()的参数太少,在C:\ apache \ htdocs \ mujProjekt \ vendor \ symfony \ symfony \ src \ Symfony \ Component \ HttpKernel \ Controller \中传递0第198行的ControllerResolver.php和预期的1个
控制器:
namespace AdminBundle\Controller;
use AdminBundle\Manager\AdminManager;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
/**
* Class DefaultController
* @package AdminBundle\Controller
* @Route("/registrace")
*/
class RegistraceController extends Controller
{
/**
* @var AdminManager
*/
private $manager;
public function __construct(AdminManager $manager)
{
$this->manager = $manager;
}
...
AdminManager:
namespace AdminBundle\Manager;
use AdminBundle\Entity\Uzivatel;
use Doctrine\Common\Persistence\ManagerRegistry;
class AdminManager
{
private $em;
public function __construct(ManagerRegistry $Doctrine)
{
$this->em = $Doctrine->getManager('default');
}
...
AdminBundle \ Resources \ config \ services.yml:
services:
# admin.example:
# class: AdminBundle\Example
# arguments: ["@service_id", "plain_value", "%parameter%"]
admin.admin_manager:
class: AdminBundle\Manager\AdminManager
arguments:
["@doctrine"]
我试图清除缓存,但没有成功。来自AdminBundle的services.yml正确包含在config.yml中。
config.yml中的orm config:
orm:
auto_generate_proxy_classes: '%kernel.debug%'
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
AdminBundle: ~
我正在使用Symfony 3.3和PHP 7.1。
答案 0 :(得分:1)
如果要在RegistraceController中注入AdminManager,则必须将RegistraceController定义为服务。看看https://symfony.com/doc/current/controller/service.html。这种方法有一些缺点,因为你没有从Symfony的基础控制器继承。因此,如果需要,还必须注入路由器和模板引擎。但我喜欢将Controller定义为服务。当你看到依赖关系时,它会更清晰。
除此之外,您可以将控制器内的Symfony Container用作控制容器的反转,并使用$ this-> get('admin.admin_manager')获取服务;从你的行动中。
答案 1 :(得分:0)
所以我认为您的服务yml需要看起来像这样:
services:
admin.admin_manager:
class: AdminBundle\Manager\AdminManager
arguments: ["@doctrine"]
admin.admin_controller:
class: AdminBundle\Controller\RegistraceController
arguments: ["@admin.admin_manager"]
在这里查看Symfony Service Container
希望它会有所帮助!
问候:)
答案 2 :(得分:0)
谢谢大家的回复。幸运的是,我通过将其添加到app / config / services.yml中的服务来解决了我的问题。
AdminBundle\Controller\:
resource: '%kernel.project_dir%/src/AdminBundle/Controller'
public: true
tags: ['controller.service_arguments']