2011-08-26 79 views

回答

6

在Symfony2的实体被设计为POPOs,这意味着他们真的不应该有自己的范围之外获得任何东西。

如果您需要在实体中的一个部分配置选项,考虑将它作为一个参数从控制器就像这样:

$entityName->methodName($param1, $this->container->getParameter('xyz')); 
-5

可以使用依赖注入和模型添加到您的services.yml文件,和其他服务一样,您可以提供其他服务作为构造函数参数。唯一的缺点是您拨打​​而不是$derp = new Derp();

例如:

 
    # src/Derp/LolBundle/Resources/config/services.yml 
    services: 
     derp: 
      class:  \Derp\LolBundle\Entity\Message 
      arguments: [@service_container] 

@service_container是使用php app/console container:debug发现的服务。它的功能与您的控制器中的$this->container功能相同,并提供给您班级的构造函数。有关如何使用服务容器的更多信息,请参阅here

如前所述,它们是POPO(Plain Old PHP Objects),之前的依赖注入方法是糟糕的选择,因为每次使用它时都必须记住为模型实体提供相同的对象(这是一个麻烦)和Symfony2服务是一种缓解这种痛苦的方法。

+0

谢谢你,这是一个干净的解决方案 – Georg

+1

如果这是您正在寻求请标明它是这样(为他人注意为好)答案。 – Adrian

+1

手动给出参数是最佳解决方案。在DIC中拥有一个实体是错误的,因为Doctrine2不会使用DIC来创建新实体,但会像任何POPO那样实例化它们。 – futurecat

0

这可能(会)打破DIC的模式,但你可以使用一个单独的类,以“全球化”你需要什么。

为了养活你的全局变量,使用来自捆绑类boot方法(在这里您可以访问DIC的东西,因此配置)。

或者更简单的,静态字段添加到您的实体。

快速&肮脏的解决方案,不要滥用它;-)

相关问题