symfony symfony-2.3

¿Cómo leo los parameters.yml en un controlador en symfony2?



symfony-2.3 (5)

He puesto un par de variables personalizadas en mi aplicación / config / parameters.yml.

parameters: api_pass: apipass api_user: apiuser

Necesito acceder a estos desde mi controlador y he intentado buscarlos

$this->get(''api_user'');

desde mi archivo de controlador. Cuando pruebo esto, aparece este mensaje de error:

You have requested a non-existent service "api_user".

¿Cuál es la forma correcta de hacer esto?


El camino limpio

Desde 2017 y Symfony 3.3 + 3.4 hay una manera mucho más limpia, fácil de configurar y usar.

En lugar de utilizar contenedor y servicio / parámetro localizador anti-patrón, puede pasar parámetros a la clase a través de su constructor . No se preocupe, no es un trabajo que demanda mucho tiempo, sino que se configura una vez y se olvida 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. Cualquier 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 listo!

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, revisa mi publicación Cómo obtener parámetros en Symfony Controller Clean Way .

(Se ha probado y lo mantengo actualizado para la nueva versión principal de Symfony (5, 6 ...)).


En Symfony 2.6 y versiones anteriores , para obtener un parámetro en un controlador, primero debe obtener el contenedor y, luego, el parámetro necesario.

$this->container->getParameter(''api_user'');

Este capítulo de documentación lo explica.

Mientras que el método $this->get() en un controlador cargará un servicio ( doc )

En Symfony 2.7 y las versiones más nuevas , para obtener un parámetro en un controlador puede usar lo siguiente:

$this->getParameter(''api_user'');




Te envío un ejemplo con swiftmailer:

parameters.yml

recipients: [email1, email2, email3]

servicios:

your_service_name: class: your_namespace arguments: ["%recipients%"]

la clase del servicio:

protected $recipients; public function __construct($recipients) { $this->recipients = $recipients; }