내 app / config / parameters.yml에 몇 가지 사용자 정의 변수를 넣었습니다.
parameters:
api_pass: apipass
api_user: apiuser
내 컨트롤러에서 이것에 액세스해야하며
$this->get('api_user');
내 컨트롤러 파일 내에서. 이것을 시도하면 다음과 같은 오류 메시지가 나타납니다.
You have requested a non-existent service "api_user".
이를 수행하는 올바른 방법은 무엇입니까?
답변
에서 심포니 2.6 및 이전 버전 당신이 먼저 용기를 얻을해야하고, – -, 컨트롤러에 매개 변수를 얻기 위해 필요한 매개 변수를.
$this->container->getParameter('api_user');
이 문서 장에서 설명합니다.
$this->get()
컨트롤러의 메소드가 서비스를로드하는 동안 ( doc )
에서 심포니 2.7 이상 버전 , 다음을 사용할 수있는 컨트롤러에 매개 변수를 얻을 수 있습니다 :
$this->getParameter('api_user');
답변
깨끗한 길-2018+, Symfony 3.4+
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"
}
}
즉시 업그레이드 준비!
이전 방식을 사용하는 경우 Rector로 자동화 할 수 있습니다 .
더 읽어보기
이를 서비스 로케이터를 통한 생성자 주입 이라고 합니다. 접근을 합니다.
이에 대한 자세한 내용은 내 게시물 Symfony Controller에서 매개 변수를 얻는 방법을 확인하십시오 .
(테스트를 거쳐 새로운 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'));
}
자세한 내용은 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');
답변
다음을 사용할 수도 있습니다.
$container->getParameter('api_user');
http://symfony.com/doc/current/service_container/parameters.html 방문