【问题标题】:Symfony sharing controller objectSymfony 共享控制器对象
【发布时间】:2014-06-03 03:38:09
【问题描述】:

我在 Symfony 上开始了一个项目,而不是从头开始。 我想就我在此应用程序中找到的一种编码方式获得您的反馈。

应用程序作为很多业务类。其中一些类需要与实体管理器、翻译器、存储在会话中的一些数据一起使用......所有可从控制器(也)获得的对象。

所以其中一些类在构造函数中接收到控制器对象,将其存储为成员并稍后在方法中使用它。一种自定义注入。

这是一个代码示例(不完整,只是为了展示机制):

在控制器中:

  /**
 * @Route("/gac/print/{param}", name="_gac_print")
 * @Template()
 */
 public function printAction($param)
 {
    $printerTool = new PrinterTool($this); //PrinterTool is a custom business class  
    $printerTool->printToFile($param);    
 }

商务舱:

类打印机工具{

private $controller;

public function __construct($controller)
{
    $this->controller = $controller;
    $user = $this->controller->get('security.context')->getToken()->getUser();
    $this->userId = $user->getId();
}

public function printToFile($param)
{
    $trans = $this->controller->get('translator');
    $em = $this->controller->getDoctrine()->getEntityManager();
    //Use those to do some business logic
}

};

我是否必须考虑使用正确的注入来重写这段代码,或者这是可以保留的东西。

谢谢!

【问题讨论】:

    标签: php symfony controller share


    【解决方案1】:

    这就是 Symfony2 的全部意义所在。正确使用DIC,直到您的代码库不大!传递控制器对象是真的一个坏习惯。在这里,您的PrinterTool 服务只需要同时注入translatorsecurity.context 服务。

    【讨论】:

    • 谢谢!代码很大,但这可以逐步完成。除非有任何原因导致此代码可能由于这种实现方式而引发问题。但据我了解,这只是一个坏习惯,而不是干净和传统的代码,对吧?您认为将控制器作为对象传递而不是使用注入有“充分”的理由吗?
    • 这是正确的方法,不多不少。如果您不遵循 Symfony CS,那么阅读您的代码的人可能不会理解它。
    • 平!因为没有人回答你! ^^
    猜你喜欢
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 2017-03-24
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多