清洁方式 2018
自 2018 年和 Symfony 3.4 以来,有更清洁的方式 - 易于设置和使用。
您可以通过它的构造函数将参数传递给类,而不是使用容器和服务/参数定位器反模式。别担心,这不是耗时的工作,而是设置一次后忘记的方法。
如何分两步设置?
1.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 将其自动化。
阅读更多
这称为服务定位器方法上的构造函数注入。
要了解更多信息,请查看我的文章How to Get Parameter in Symfony Controller the Clean Way。
(它已经过测试,我会为新的 Symfony 主要版本(5、6...)更新它)。