Symfony:为什么我的容器在我的控制器中为空?

时间:2017-11-11 20:56:04

标签: symfony symfony-3.3

使用Symfony 3.3,我有一个控制器TrainingOrganizationController

class TrainingOrganizationController extends Controller
{
    @Route...
    public function deleteAction(Request $request, UserInterface $user, TrainingOrganization $organization)
    {
        ...
        $this->delete($user, $organization);
        ...
    }

    public function delete(UserInterface $user, TrainingOrganization $organization)
    {
        $organization->setDeletedAt(new \DateTime());
        $organization->setDeletedBy($user);

        $entityManager = $this->getDoctrine()->getManager();

        $centers = $entityManager->getRepository(TrainingCenter::class)->getResults([
            'whereTrainingOrganizationId' => $organization->getId(),
        ]);

        foreach ($centers as $center) {
            $this->get(TrainingCenterController::class)->delete($user, $center);
        }
    }
}

此Controller调用其他Controller:TrainingCenterControllerdelete()函数:

class TrainingCenterController extends Controller
{
    public function delete(UserInterface $user, TrainingCenter $center)
    {
        $center->setDeletedAt(new \DateTime());
        $center->setDeletedBy($user);

        $entityManager = $this->getDoctrine()->getManager(); // ERROR
        ...

但我在delete函数上有这个错误:“在null上调用成员函数get()”。我不明白,因为我的控制器作为服务,我有默认的配置:

AppBundle\Controller\:
    resource: '../../src/AppBundle/Controller'
    public: true
    tags: ['controller.service_arguments']
你能帮帮我吗?我想调用几个控制器来进行级联删除(而不是重复代码):)

1 个答案:

答案 0 :(得分:1)

您正在使用控制器作为通用服务 - 更好地使用常规服务 - 构造函数 - 在其中注入一个doctrine实例,并从需要的任何地方调用该服务 - 通过->get(name::class)或使用一个完整的服务驱动的控制器,具有完整的__constructor(TypeHint $serviceName)

当系统创建控制器并调用操作(或__invoke())时,发生的其他事情之一是ContainerAwareTrait允许调用setContainer() - 这对于常规服务来说不会发生。