Symfony 在控制器内调用控制器
为什么在控制器内部调用控制器时会出现以下错误 致命错误:对中的非对象调用成员函数get() /home/web/project/symfony2/vendor/symfony/src/symfony/Bundle/FrameworkBundle/Controller/Controller.php 在线149 在控制器中,我调用了一个扩展Symfony 在控制器内调用控制器,symfony,Symfony,为什么在控制器内部调用控制器时会出现以下错误 致命错误:对中的非对象调用成员函数get() /home/web/project/symfony2/vendor/symfony/src/symfony/Bundle/FrameworkBundle/Controller/Controller.php 在线149 在控制器中,我调用了一个扩展controller的类: class DemoController extends Controller { public function index
controller
的类:
class DemoController extends Controller
{
public function indexAction()
{
$object = new \Acme\DemoBundle\Service\Object();
$object->method();
}
// ...
}
课程是这样的:
# Acme/DemoBundle/Service/Object.php
class Object extends Controller
{
public function method()
{
$em = $this->getDoctrine()->getEntityManager(); // the problem
// ...
}
}
当我使用$this
调用控制器内的服务、条令或其他类似内容时,发生了错误。否则,它会起作用
例如,我如何在这个类中使用条令?试试看
$object->setContainer($this->container);
调用method()
编辑:
基本上,让服务扩展控制器是个坏主意,但是如果你真的需要这样做,试着添加这个
your.service:
class: Your\Class
arguments: [...]
calls:
- [ setContainer, [@service_container] ]
在您的服务配置文件中(可能是service.yml
)试试看
$object->setContainer($this->container);
调用method()
编辑:
基本上,让服务扩展控制器是个坏主意,但是如果你真的需要这样做,试着添加这个
your.service:
class: Your\Class
arguments: [...]
calls:
- [ setContainer, [@service_container] ]
在您的服务配置文件中(可能是service.yml
)谢谢。它起作用了。有什么办法吗?特别是在课堂上解决问题。因为,我将在很多地方使用这个课程(作为一种服务),这将是重复的。你太棒了。请您很快告诉我为什么这是个坏主意好吗?Controller
类是为路由目标(操作)而设计的,但您将其作为一种服务使用。你到底为什么要这么做?Controller
类中的每个函数基本上都是不同服务的包装器,例如Controller::get()
,它是$this->container->get()的快捷方式。因此,通过在您的服务中注入服务容器(参数:[@service\u container]
),您可以在不扩展Controller
的情况下执行相同的操作。为了跟进@prehfeldt的出色响应,您应该做的是只注入服务完成其工作所需的服务。需要实体经理吗?然后注入实体管理器。很少有服务需要访问容器中的所有内容。谢谢。它起作用了。有什么办法吗?特别是在课堂上解决问题。因为,我将在很多地方使用这个课程(作为一种服务),这将是重复的。你太棒了。请您很快告诉我为什么这是个坏主意好吗?Controller
类是为路由目标(操作)而设计的,但您将其作为一种服务使用。你到底为什么要这么做?Controller
类中的每个函数基本上都是不同服务的包装器,例如Controller::get()
,它是$this->container->get()的快捷方式。因此,通过在您的服务中注入服务容器(参数:[@service\u container]
),您可以在不扩展Controller
的情况下执行相同的操作。为了跟进@prehfeldt的出色响应,您应该做的是只注入服务完成其工作所需的服务。需要实体经理吗?然后注入实体管理器。很少有服务需要访问容器中的所有内容。