formato comentarios symfony configuration twig

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.