Ich habe eine Symfony2 Twig template. Ich möchte den Wert eines config-Parameters in dieser twig template (eine Versionsnummer) ausgeben. Deshalb habe ich die config definiert Parameter wie folgt:
parameters:
app.version: 0.1.0
Ich kann diesen Konfigurationsparameter in Controllern verwenden, aber ich habe keine Ahnung, wie ich ihn in meiner Twig Vorlage erhalten soll.
Einfach können Sie in Ihrer Konfigurationsdatei definieren:
twig:
globals:
version: "0.1.0"
Und greifen Sie in Ihre Vorlage mit
{{ version }}
Andernfalls muss es ein Weg mit einer Twig Erweiterung sein, um Ihre Parameter offenzulegen.
Sie können die Parametersubstitution im Abschnitt twig globals der Konfiguration verwenden:
Parameterkonfiguration:
parameters:
app.version: 0.1.0
Zweigkonfiguration:
twig:
globals:
version: '%app.version%'
Zweigvorlage:
{{ version }}
Diese Methode bietet den Vorteil, dass Sie den Parameter auch in ContainerAware
Klassen verwenden können, indem Sie Folgendes verwenden:
$container->getParameter('app.version');
Sie können auch das integrierte System für Dienstparameter nutzen, mit dem Sie den Wert isolieren oder wiederverwenden können:
# app/config/parameters.yml
parameters:
ga_tracking: UA-xxxxx-x
# app/config/config.yml
twig:
globals:
ga_tracking: "%ga_tracking%"
Jetzt ist die Variable ga_tracking in allen Twig Vorlagen verfügbar:
<p>The google tracking code is: {{ ga_tracking }}</p>
Der Parameter ist auch in den Steuerungen verfügbar:
$this->container->getParameter('ga_tracking');
Sie können einen Service auch als globale Twig Variable (Symfony2.2 +) definieren:
# app/config/config.yml
twig:
# ...
globals:
user_management: "@acme_user.user_management"
http://symfony.com/doc/current/templating/global_variables.html
Wenn die globale Variable, die Sie festlegen möchten, komplizierter ist - beispielsweise ein Objekt -, können Sie die oben beschriebene Methode nicht verwenden. Stattdessen müssen Sie eine Twig Extension erstellen und die globale Variable als einen der Einträge in der getGlobals-Methode zurückgeben.
In neueren Versionen von Symfony2 (mit einem parameters.yml
anstatt parameters.ini
) können Sie Objekte oder Arrays anstelle von Schlüssel-Wert-Paaren speichern, sodass Sie Ihre Globals folgendermaßen verwalten können:
config.yml (nur einmal bearbeitet):
# app/config/config.yml
twig:
globals:
project: %project%
parameters.yml:
# app/config/parameters.yml
project:
name: myproject.com
version: 1.1.42
Und dann können Sie in einer twig Datei {{ project.version }}
oder {{ project.name }}
.
Hinweis: Ich persönlich mag es nicht, Dinge zu app
hinzuzufügen, nur weil dies die Symfony-Variable ist und ich nicht weiß, was dort in Zukunft gespeichert wird.
Die obigen Angaben sind korrekt und funktionieren einwandfrei. Ich habe es anders benutzt.
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%
Innerhalb des Controllers:
$application_version = $this->container->getParameter('app.version');
// Here using app.yml
Innerhalb der Vorlage/Zweig-Datei:
Project version {{ version }}!
{# Here using app_twig.yml content. #}
{# Because in controller we used $application_version #}
Controller:
public function indexAction() {
$application_version = $this->container->getParameter('app.version');
return array('app_version' => $application_version);
}
template/twig file:
Project version {{ app_version }}
Ich erwähnte die verschiedenen zum besseren Verständnis.
Mit der Erweiterung Twig können Sie eine parameter
Twig-Funktion erstellen:
{{ 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 }
Sie können $this->getParameter('app.version')
im Controller einfach an twig param binden und dann rendern.