The Clean Way - 2018+, Symfony 3.4+
Desde 2017 y Symfony 3.3 + 3.4 hay una forma mucho más limpia: fácil de configurar y usar.
En lugar de utilizar el antipatrón de contenedor y servicio / localizador de parámetros, puede pasar parámetros a la clase a través de su constructor . No se preocupe, no es un trabajo que requiera mucho tiempo, sino más bien configurar una vez y olvidar el enfoque.
¿Cómo configurarlo en 2 pasos?
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. Cualquiera 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"
}
}
¡Actualización instantánea lista!
En caso de que use un enfoque anterior, puede automatizarlo con Rector .
Lee mas
Esto se llama inyección de constructor sobre el enfoque del localizador de servicios .
Para leer más sobre esto, consulte mi publicación Cómo obtener el parámetro en Symfony Controller the Clean Way .
(Está probado y lo mantengo actualizado para la nueva versión principal de Symfony (5, 6 ...)).
get
método en el controlador también usa el contenedor, pero solo puede obtener servicios de un contenedor, no parámetros. NecesitasgetParameter
obtener parámetros.