如何从Symfony 2中的模型层访问配置参数?

时间:2011-08-26 21:33:20

标签: symfony

有没有办法从模型层访问 config.yml 中的配置参数?从控制器我可以使用$this->container->getParameter('xyz')。但是如何从Model层中的类中完成它?

3 个答案:

答案 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服务是缓解这种痛苦的一种方法。