Jak uzyskać parametry konfiguracyjne w szablonach gałązek Symfony2

Mam szablon Symfony2. Chcę wypisać wartość parametru konfiguracyjnego w tym szablonie gałązki (numer wersji). Dlatego zdefiniowałem parametr config tak:

parameters:
    app.version: 0.1.0

Jestem w stanie użyć tego parametru konfiguracyjnego w kontrolerach, ale nie mam pojęcia, jak go uzyskać w moim szablonie gałązki.

Author: Habeeb Perwad, 2011-07-22

8 answers

Łatwo można zdefiniować w pliku konfiguracyjnym:

twig:
    globals:
        version: "0.1.0"

I uzyskaj do niego dostęp w szablonie za pomocą

{{ version }}

W przeciwnym razie musi to być sposób z rozszerzeniem gałązki, aby ujawnić swoje parametry.

 178
Author: webda2l,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-22 20:33:02

Możesz użyć podstawienia parametru w sekcji gałązki globali config:

Parametr config:

parameters:
    app.version: 0.1.0

Konfiguracja gałązki:

twig:
    globals:
        version: '%app.version%'

Szablon gałązki:

{{ version }}

Ta metoda pozwala na użycie parametru również w klasach ContainerAware, używając:

$container->getParameter('app.version');
 375
Author: Ryall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-16 17:58:41

Możesz również skorzystać z wbudowanego systemu parametrów Usługi, który pozwala wyizolować lub ponownie wykorzystać wartość:

# app/config/parameters.yml
parameters:
    ga_tracking: UA-xxxxx-x

# app/config/config.yml
twig:
    globals:
        ga_tracking: "%ga_tracking%"

Teraz zmienna ga_tracking jest dostępna we wszystkich szablonach gałązek:

<p>The google tracking code is: {{ ga_tracking }}</p>

Parametr jest również dostępny wewnątrz sterowników:

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

Można również zdefiniować usługę jako globalną zmienną gałązki (Symfony2. 2+):

# app/config/config.yml
twig:
    # ...
    globals:
        user_management: "@acme_user.user_management"

Http://symfony.com/doc/current/templating/global_variables.html

Jeśli globalny zmienna, którą chcesz ustawić jest bardziej skomplikowana - powiedzmy obiekt - wtedy nie będziesz mógł użyć powyższej metody. Zamiast tego musisz utworzyć rozszerzenie gałązki i zwrócić zmienną globalną jako jeden z wpisów w metodzie getGlobals.

 82
Author: Francesco Casula,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-01 14:22:39

W nowszych wersjach Symfony2 (używając parameters.yml zamiast parameters.ini), możesz przechowywać obiekty lub tablice zamiast par klucz-wartość, dzięki czemu możesz zarządzać swoimi globalami w ten sposób:

Config.yml (edytowany tylko raz):

# app/config/config.yml
twig:
  globals:
    project: %project%

Parametry.yml:

# app/config/parameters.yml
project:
  name:       myproject.com
  version:    1.1.42

A następnie w pliku gałązki można użyć {{ project.version }} lub {{ project.name }}.

Uwaga: osobiście nie lubię dodawać rzeczy do app, tylko dlatego, że jest to zmienna Symfony i nie wiem, co będzie tam przechowywane w przyszłości.

 20
Author: Alain Tiemblo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-05 15:32:51

Powyższe ans są poprawne i działa dobrze. Używałem w inny sposób.

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%

Kontroler wewnętrzny:

$application_version = $this->container->getParameter('app.version');
// Here using app.yml

Wewnątrz szablonu / pliku gałązki:

Project version {{ version }}!
{#  Here using app_twig.yml content.  #}
{#  Because in controller we used $application_version  #}

Aby użyć wyjścia kontrolera:

Kontroler:

public function indexAction() {
        $application_version = $this->container->getParameter('app.version');
        return array('app_version' => $application_version);
    }

Szablon / plik twig:

Project version {{ app_version }}

Wspomniałem różne na lepsze Rozumiem.

 16
Author: Sudhakar Krishnan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-14 16:59:10

Z rozszerzeniem gałązki można utworzyć parameter funkcję gałązki:

{{ 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';
    }
}

Serwis.yml:

  iz.twig.extension:
    class: IzBundle\Services\TwigExtension
    properties:
      container: "@service_container"
    tags:
      - { name: twig.extension }
 11
Author: Thomas Decaux,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-04 17:00:25

Możesz po prostu powiązać $this->getParameter('app.version') w kontrolerze do twig param, a następnie renderować go.

 1
Author: Jean-Luc Barat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-07 11:29:54

W konfingu.yml

# app/config/config.yml
twig:
  globals:
    version: '%app.version%'

W widoku gałązek

# twig view
{{ version }}
 -3
Author: Le Petit Monde de Purexo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-03 14:48:23