-->

如何从parameters.yml在Symfony2的控制器读取?(How do I read fr

2019-07-05 11:09发布

我已经把一对夫妇自定义变量在我的应用程序/配置/ parameters.yml。

parameters:
    api_pass: apipass
    api_user: apiuser

我需要从我的控制器访问这些,并试图与来接他们

$this->get('api_user');

从我的控制文件中。 当我尝试这一点,我得到这个错误信息:

You have requested a non-existent service "api_user".

什么是这样做的正确方法?

Answer 1:

Symfony的2.6和旧版本 ,以获得控制器的参数-你应该先拿到容器,然后-所需要的参数。

$this->container->getParameter('api_user');

本文档章节解释它。

虽然$this->get()方法在控制器将加载服务( DOC )

Symfony的2.7及更高版本 ,以获得一个控制器,可以使用以下参数:

$this->getParameter('api_user');


Answer 2:

清洁方法

由于2017年和Symfony的3.3 + 3.4有很多清洁的方式-易于安装和使用。

而不是使用容器和服务/参数定位反模式,您可以通过它的构造函数参数传递给类 。 别担心,这不是时间要求苛刻的工作,而是设置一次和忘记的办法。

如何设置它在2个步骤?

1. app/config/services.yml

# config.yml

# config.yml
parameters:
    api_pass: 'secret_password'
    api_user: 'my_name'

services:
    _defaults:
        autowire: true
        bind:
            $apiPass: '%api_pass%'
            $apiUser: '%api_user%'

    App\:
        resource: ..

2.任何Controller

<?php declare(strict_types=1);

final class ApiController extends SymfonyController
{
    /**
     * @var string 
     */
    private $apiPass;

    /**
     * @var string
     */
    private $apiUser;

    public function __construct(string $apiPass, string $apiUser)
    {
        $this->apiPass = $apiPass;
        $this->apiUser = $apiUser;
    }

    public function registerAction(): void
    {
        var_dump($this->apiPass); // "secret_password"
        var_dump($this->apiUser); // "my_name"
    }
}

瞬间提升准备好了!

如果您在使用较老的方法,你可以与校长自动执行它 。

阅读更多

这就是所谓的构造函数注入了服务定位的方法。

要了解更多关于这一点,检查我的岗位如何获取参数的的Symfony控制器的清洁方式 。

(它的测试,我把它更新的新的Symfony主要版本(5,6 ......))。



Answer 3:

我给你举个例子与swiftmailer:

parameters.yml

recipients: [email1, email2, email3]

服务:

your_service_name:
        class: your_namespace
        arguments: ["%recipients%"]

班里的服务:

protected $recipients;

public function __construct($recipients)
{
    $this->recipients = $recipients;
}


Answer 4:

在Symfony的4,你可以使用ParameterBagInterface

use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;

class MessageGenerator
{
    private $params;

    public function __construct(ParameterBagInterface $params)
    {
        $this->params = $params;
    }

    public function someMethod()
    {
        $parameterValue = $this->params->get('parameter_name');
        // ...
    }
}

app/config/services.yaml

parameters:
    locale: 'en'
    dir: '%kernel.project_dir%'

它为我在这两个控制器和表单类。 更多的细节可以在Symfony的博客上找到 。



Answer 5:

您可以使用:

public function indexAction()
{
   dump( $this->getParameter('api_user'));
}

欲了解更多信息,我建议你阅读文档:

http://symfony.com/doc/2.8/service_container/parameters.html



Answer 6:

你也可以使用:

$container->getParameter('api_user');

访问http://symfony.com/doc/current/service_container/parameters.html



文章来源: How do I read from parameters.yml in a controller in symfony2?