【问题标题】:Symfony : How to access configuration in controllerSymfony:如何访问控制器中的配置
【发布时间】:2016-08-10 17:11:57
【问题描述】:

这可能是一个愚蠢的问题,但我看不到如何访问这些数据:

在主 app/config/config.yml 中,我有我的应用程序的一般配置数据。

parameters:    #accessible by getParameter()
    locale: fr
    # ...
fos_user:    #accessible by ???
    #...
    registration:
        form:
            from_email:
                address:     mymail@mydomain.fr
                sender_name: TheSenderName

在我的自定义包中,我可以使用 config.yml 文件访问参数:

$this->container->getParameter('locale'); //gives me "fr" as expected

但是如何访问非参数配置值?

我想在这里获取 FOS 用户捆绑配置中定义的地址: 我做不到

$admin_adress = $this->container->getParameter('fos_user.registration.confirmation.from_email.address');

访问这些的正确方法是什么?

编辑: 是的,我想从 FOS 用户包(在此示例中,但可以是任何)、控制器或我的包中的任何内容中访问此配置数据。

【问题讨论】:

  • 您制作的 Bundle 是否需要此功能?
  • 是的。愚蠢的问题。嗯,不是真的。只有参数可以通过 getParameter 直接访问。除非捆绑包本身使它们可用,否则正常的配置内容将不可用。您最好的选择是将 from_email 定义为参数。或者可能深入研究捆绑包,看看它们是否暴露在某个地方。
  • 他不能使用捆绑配置和扩展类将它们设置为参数吗?
  • 感谢您提供的所有 cmets 和解决方案。我现在明白这不是一个如此幼稚的问题。我非常清楚地认为,由于每个包都在 config.yml 中进行了配置,因此有一种“常规”方式(SF 函数)也可以访问我的自定义包中的任何一个(在控制器、侦听器、管理器或其他任何东西中)。对我来说,Don Calisto 的解决方案是最简单的。这比在别处复制参数要好。但是,在示例中(FOS 用户包),这是一个标准配置数据值。
  • 我创建了一个包,用于访问每个已注册包的最终配置值(内置,如 SecurityBundle 包括在内)。见github.com/chalasr/RCHConfigAccessBundle

标签: symfony configuration controller


【解决方案1】:

我认为this question 成功了

class MyProjectExtension extends Extension
{
    public function load( array $configs, ContainerBuilder $container )
    {
        // The next 2 lines are pretty common to all Extension templates.
        $configuration = new Configuration();
        $processedConfig = $this->processConfiguration( $configuration, $configs );

        // This is the KEY TO YOUR ANSWER
        $container->setParameter( 'from_email.address', $processedConfig[ 'registration.confirmation.from_email.address' ];

        // Other stuff like loading services.yml
    }

【讨论】:

    【解决方案2】:

    你可以这样做

    parameters:
        locale: fr
        fos_user:
            registration:
                form:
                    from_email:
                        address: mymail@mydomain.fr
        # ...
    fos_user:
        #...
        registration:
            form:
                from_email:
                    address:     %fos_user.registration.form.from_email.address%
                    sender_name: TheSenderName
    

    当然,我选择这个名称只是为了适合您的控制器对参数的请求:您可以(也许应该)选择其他键。

    但是使用container->getParameter,您只能访问配置文件的parameters 部分(以及供应商公开的参数)

    【讨论】:

      【解决方案3】:

      其中一种解决方案可以将您的控制器作为服务传递,然后像这样注入您的参数:

      # services.yml
      my.amazing.controller:
          class: CompanyFirst\LabBundle\Controller\PloufController
          arguments:
              - '@filesystem'
              - '%dump_file_convention%' // your config parameter
      

      【讨论】:

        猜你喜欢
        • 2015-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-04
        • 2012-11-27
        • 2017-06-27
        • 2017-11-10
        相关资源
        最近更新 更多