답변:
에서 심포니 2.6 및 이전 버전 당신이 먼저 용기를 얻을해야하고, - -, 컨트롤러에 매개 변수를 얻기 위해 필요한 매개 변수를.
$this->container->getParameter('api_user');
이 문서 장에서 설명합니다.
$this->get()
컨트롤러의 메소드가 서비스를로드하는 동안 ( doc )
에서 심포니 2.7 이상 버전 , 다음을 사용할 수있는 컨트롤러에 매개 변수를 얻을 수 있습니다 :
$this->getParameter('api_user');
$this->getContainer()->getParameter('api_user');
나는 치명적인 오류 : 정의되지 않은 메서드 ..Longpath에 전화 .. \ 컨트롤러 :: getContainer에 ().
$this->hasParameter()
아직 작동하지 않습니다.
2017 및 Symfony 3.3 + 3.4 부터 설정 및 사용이 훨씬 더 깔끔한 방법이 있습니다.
컨테이너 및 서비스 / 매개 변수 로케이터 안티 패턴을 사용하는 대신 생성자를 통해 클래스에 매개 변수를 전달할 수 있습니다 . 걱정하지 마십시오. 시간이 많이 걸리는 작업이 아니라 한 번 설정하고 접근 방식을 잊어 버립니다 .
2 단계로 설정하는 방법은 무엇입니까?
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
매개 변수를 얻을 수 있습니다.