有没有办法从模型层访问 config.yml 中的配置参数?从控制器我可以使用$this->container->getParameter('xyz')
。但是如何从Model层中的类中完成它?
答案 0 :(得分:6)
在symfony2中,实体被设计为POPO,这意味着它们不应该真正访问其范围之外的任何内容。
如果您需要在某个实体中使用某个配置选项,请考虑将其作为参数从控制器传递,如下所示:
$entityName->methodName($param1, $this->container->getParameter('xyz'));
答案 1 :(得分:0)
这可能会破坏DIC模式,但你可以使用单例类来“全局化”你需要的东西。
要提供全局变量,请使用Bundle类中的boot
方法(您可以在其中访问DIC内容,因此可以进行配置)。
或者更简单,向您的实体添加静态字段。
快速&肮脏的解决方案,不要滥用它; - )
答案 2 :(得分:-5)
您可以使用依赖注入并将您的模型添加到services.yml文件中,并且与您制作的每个其他服务一样,您可以提供其他服务作为构造函数参数。唯一的缺点是您拨打$derp = $this->get("your_service_name");
而不是$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(普通旧PHP对象),之前的依赖注入方法是不好的选择,因为您必须记住每次使用时都为模型实体提供相同的对象(这是一个麻烦)和Symfony2服务是缓解这种痛苦的一种方法。