我已经把一对夫妇自定义变量在我的应用程序/配置/ parameters.yml。
parameters:
api_pass: apipass
api_user: apiuser
我需要从我的控制器访问这些,并试图与来接他们
$this->get('api_user');
从我的控制文件中。 当我尝试这一点,我得到这个错误信息:
You have requested a non-existent service "api_user".
什么是这样做的正确方法?
在Symfony的2.6和旧版本 ,以获得控制器的参数-你应该先拿到容器,然后-所需要的参数。
$this->container->getParameter('api_user');
本文档章节解释它。
虽然$this->get()
方法在控制器将加载服务( DOC )
在Symfony的2.7及更高版本 ,以获得一个控制器,可以使用以下参数:
$this->getParameter('api_user');
清洁方法
由于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 ......))。
我给你举个例子与swiftmailer:
parameters.yml
recipients: [email1, email2, email3]
服务:
your_service_name:
class: your_namespace
arguments: ["%recipients%"]
班里的服务:
protected $recipients;
public function __construct($recipients)
{
$this->recipients = $recipients;
}
在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的博客上找到 。
您可以使用:
public function indexAction()
{
dump( $this->getParameter('api_user'));
}
欲了解更多信息,我建议你阅读文档:
http://symfony.com/doc/2.8/service_container/parameters.html
你也可以使用:
$container->getParameter('api_user');
访问http://symfony.com/doc/current/service_container/parameters.html