我在 Symfony 工作了一段时间,并开始使用 Controller 作为服务。问题是我不确定我是否了解依赖注入(inject)是如何工作的。如果我在一个 Action 中打印 $this ,它会完美地工作。
/**
* @Route("/testing/this")
*/
public function thisAction(Request $request)
{
var_dump($this);
return new Response();
}
回应:
object(Linkedip\WizardBundle\Controller\PaymentsController)[153]
protected 'object' => null
protected 'container' =>
object(appDevDebugProjectContainer)[198]
protected 'parameterBag' =>
object(Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag)[48]
protected 'parameters' =>
array
...
但是后来,我决定让我的 Controller 成为一种服务,以便在其他 Controller 中使用(我希望在一个 Controller 中拥有操作方法和服务方法)。
parameters:
linkedip.controller.payments.class: Linkedip\WizardBundle\Controller\PaymentsController
services:
payments.controller:
class: %linkedip.controller.payments.class%
因此,我添加了一个新方法,我计划在其他 Controller 中使用它,但是当我尝试在新方法中调用 $this 时,看看我得到了什么。
/**
* @Route("/testing/this")
*/
public function thisAction(Request $request)
{
$paymentsController = $this->get('payments.controller');
$paymentsController->service();
return new Response();
}
/**
* [SERVICE]
*/
public function service()
{
var_dump($this);
return null;
}
回应:
object(Linkedip\WizardBundle\Controller\PaymentsController)[937]
protected 'object' => null
protected 'container' => null
为了解决这个问题,我创建了一个 setter 来将 $this 对象直接注入(inject)到 Controller 中。
/**
* [DEPENDENCY INJECTION]
*/
protected $object;
public function setObject($object) { $this->object = $object; }
然后,当我尝试调用其中一项服务时,我需要添加额外的行设置 $this。
$paymentsController = $this->get('payments.controller');
$paymentsController->setObject($this);
在服务方法中,我调用该对象。
$em = $this->object->getDoctrine()->getManager();
这段代码对我有用,但我觉得这是一个肮脏的把戏。我做错了什么吗?
最佳答案
[..]But then, I decided to make my controller a service to be used in other controllers (I want to have actions methods and service methods in one controller).
我不同意这种架构选择。你应该创建自己的 Controller ,让其他 Controller 继承它。然后,如果您仍然需要某项服务,则可以创建一个。
关于symfony - $这个对象在 Symfony2 的服务中使用时无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19184023/