symfony - $这个对象在 Symfony2 的服务中使用时无法正常工作

标签 symfony service dependency-injection controller symfony-2.3

我在 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/

相关文章:

c# - IoC/DI面对winforms等生成代码

symfony - 如何安全地检查节点是否为空? (Symfony 2 爬虫)

php - Symfony 中的操作系统独立供应商路径

php - config.yml 中的 DQL 未在 config_test.yml 中覆盖

Android 服务无限期运行

java - Dagger 没有按预期覆盖模块

javascript - 如何向底层库提供 db、logger 等依赖项?

symfony - "User account is disabled."的翻译

C# 检查服务是否设置为自动(延迟启动)

c# - 如何在Windows服务安装程序中设置 "interact with desktop"