Answers:
在Symfony 2.6和更早的版本中,要在控制器中获取参数-您应首先获取容器,然后获取所需的参数。
$this->container->getParameter('api_user');
本文档章节对此进行了说明。
而$this->get()
在一个控制器的方法将加载一个服务(DOC)
在Symfony 2.7和更高版本中,要在控制器中获取参数,可以使用以下命令:
$this->getParameter('api_user');
$this->getContainer()->getParameter('api_user');
致命错误:调用未定义的方法..Longpath .. \ Controller :: getContainer()。
$this->hasParameter()
尚无法使用。
自2017年和Symfony 3.3 + 3.4起,存在更简洁的方法-易于设置和使用。
您可以通过其构造函数将参数传递给类,而不是使用容器和服务/参数定位符反模式。不用担心,这不是耗时的工作,而是只需设置一次,然后忘记方法。
如何分两步设置?
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: ..
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"
}
}
如果您使用较旧的方法,则可以使用Rector使其自动化。
这称为服务定位器上的构造函数注入方法。
要了解有关此内容的更多信息,请查看我的文章如何以简洁的方式在Symfony Controller中获取参数。
(它已经过测试,我会针对新的Symfony主版本(5、6 ...)进行更新)。
在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博客中找到更多详细信息。
$meetupApiKey
我知道会发生什么比略好于$parameterBag
您可以使用:
public function indexAction()
{
dump( $this->getParameter('api_user'));
}
有关更多信息,我建议您阅读doc:
http://symfony.com/doc/2.8/service_container/parameters.html
在Symfony 4.3.1中,我使用以下命令:
services.yaml
HTTP_USERNAME: 'admin'
HTTP_PASSWORD: 'password123'
FrontController.php
$username = $this->container->getParameter('HTTP_USERNAME');
$password = $this->container->getParameter('HTTP_PASSWORD');
$this->getParameter('foo')
。这就是我使它在SF 4.8中起作用的方法。
您还可以使用:
$container->getParameter('api_user');
造访http://symfony.com/doc/current/service_container/parameters.html
get
控制器中的方法也使用容器,但是它只能从容器获取服务,而不能从参数获取服务。您需要getParameter
获取参数。