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.
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.
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');
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.
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.
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.
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 }
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.
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 }}
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