comentarios - Cómo obtener los parámetros de configuración en Symfony2 Twig Templates
symfony 3 (8)
Con una extensión Twig, puede crear un parameter
función Twig:
{{ parameter(''jira_host'') }}
TwigExtension.php:
class TwigExtension extends /Twig_Extension
{
public $container;
public function getFunctions()
{
return [
new /Twig_SimpleFunction(''parameter'', function($name)
{
return $this->container->getParameter($name);
})
];
}
/**
* Returns the name of the extension.
*
* @return string The extension name
*/
public function getName()
{
return ''iz'';
}
}
service.yml:
iz.twig.extension:
class: IzBundle/Services/TwigExtension
properties:
container: "@service_container"
tags:
- { name: twig.extension }
Tengo una plantilla Symfony2 Twig. Quiero mostrar el valor de un parámetro config en esta plantilla twig (un número de versión). Por lo tanto, definí el parámetro de configuración de esta manera:
parameters:
app.version: 0.1.0
Puedo usar este parámetro de configuración en Controladores, pero no tengo ni idea de cómo obtenerlo en mi plantilla de Twig.
En confing.yml
# app/config/config.yml
twig:
globals:
container: ''@service_container''
En la vista de Twig
# twig view
{{ container.parameter(''app.version'')) }}
En las versiones más nuevas de Symfony2 (utilizando un parameters.yml
lugar de parameters.ini
), puede almacenar objetos o matrices en lugar de pares clave-valor, para que pueda administrar sus globales de esta manera:
config.yml (editado solo una vez):
# app/config/config.yml
twig:
globals:
project: %project%
parameters.yml:
# app/config/parameters.yml
project:
name: myproject.com
version: 1.1.42
Y luego en un archivo twig, puede usar {{ project.version }}
o {{ project.name }}
.
Nota: personalmente no me gusta agregar cosas a la app
, simplemente porque esa es la variable de Symfony y no sé qué se almacenará allí en el futuro.
Fácilmente, puede definir en su archivo de configuración:
twig:
globals:
version: "0.1.0"
Y acceda a ella en su plantilla con
{{ version }}
De lo contrario, debe ser una forma con una extensión Twig para exponer sus parámetros.
Los ans dados anteriormente son correctos y funcionan bien. Lo usé de una manera diferente.
config.yml
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: app.yml }
- { resource: app_twig.yml }
app.yml
parameters:
app.version: 1.0.1
app_twig.yml
twig:
globals:
version: %app.version%
Controlador interno:
$application_version = $this->container->getParameter(''app.version'');
// Here using app.yml
Dentro de la plantilla / archivo de ramita:
Project version {{ version }}!
{# Here using app_twig.yml content. #}
{# Because in controller we used $application_version #}
Para usar la salida del controlador:
Controlador:
public function indexAction() {
$application_version = $this->container->getParameter(''app.version'');
return array(''app_version'' => $application_version);
}
plantilla / archivo de ramita:
Project version {{ app_version }}
Mencioné los diferentes para un mejor entendimiento.
Puede usar la sustitución de parámetros en la sección twig global de la configuración:
Configuración de parámetros:
parameters:
app.version: 0.1.0
Twig config:
twig:
globals:
version: ''%app.version%''
Plantilla Twig:
{{ version }}
Este método proporciona la ventaja de permitirle usar el parámetro en las clases de ContainerAware
también, usando:
$container->getParameter(''app.version'');
Simplemente puede unir $this->getParameter(''app.version'')
en el controlador para ramitar param y luego renderizarlo.
También puede aprovechar el sistema integrado de parámetros de servicio, que le permite aislar o reutilizar el valor:
# app/config/parameters.yml
parameters:
ga_tracking: UA-xxxxx-x
# app/config/config.yml
twig:
globals:
ga_tracking: "%ga_tracking%"
Ahora, la variable ga_tracking está disponible en todas las plantillas de Twig:
<p>The google tracking code is: {{ ga_tracking }}</p>
El parámetro también está disponible dentro de los controladores:
$this->container->getParameter(''ga_tracking'');
También puede definir un servicio como una variable Twig global (Symfony2.2 +):
# app/config/config.yml
twig:
# ...
globals:
user_management: "@acme_user.user_management"
http://symfony.com/doc/current/templating/global_variables.html
Si la variable global que desea establecer es más complicada, por ejemplo, un objeto, no podrá usar el método anterior. En su lugar, deberá crear una extensión Twig y devolver la variable global como una de las entradas en el método getGlobals.