我在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
}
};
我是否必须考虑使用正确的注入来重写这段代码,或者这是可以保留的东西。
谢谢!
这就是Symfony2的全部。正确使用驾驶员信息中心,直到你的代码库不太大!传递控制器对象实际上是一个坏习惯。在这里,您的PrinterTool
服务只需要注入translator
和security.context
服务。