如何在Symfony 4的Twig视图中从services.yaml中检索特定和所有YAML参数

本文概述

  • 1.确保启用了自动装配并且你有一些参数
  • 2.创建细枝扩展
  • 3.从Twig检索参数
在较旧版本的Symfony中, 我们曾经在config.yml文件中定义在部署计算机上没有更改的参数:
# app/config/config.yml# ...parameters:locale: enframework:# ...# any string surrounded by two % is replaced by that parameter valuedefault_locale:"%locale%"# ...

但是, 在Symfony 4中, 可以在此处使用的许多变量移到了env文件中, 或者在services.yaml文件中的部署机器上未更改的那些变量。对于使用此版本框架的许多新开发人员来说, 通常不清楚如何在项目中最常见的位置(如Controllers and Services)中检索那些参数, 但是我们在本文中写了如何检索它们。我们没有解释如何从Twig视图中检索它们。第一种选择是像这样在Twig中将它们公开为全局变量:
# config/packages/twig.yamltwig:# ...globals:ga_tracking: 'UA-xxxxx-x'

然后, 你可以在Twig中检索值:
< p> The Google tracking code is: {{ ga_tracking }}< /p>

但是, 这对于我们中的某些人来说可能是个问题, 因为我们需要将它们添加到两个位置中, 即services.yaml文件和Twig Globals中。幸运的是, 有一种简单的方法可以从Twig视图中检索参数, 但可以将它们放在一个地方。
在这篇简短的文章中, 我们将向你说明如何轻松地从Twig视图中检索那些参数。
1.确保启用了自动装配并且你有一些参数为了使用从services.yaml文件中检索参数的默认方式, 你需要确保在项目中启用了autowire和autoconfigure属性, 你可以检查是否在你所在的同一services.yaml文件中启用了该属性。可以为你的服务定义参数:
# app/config/services.yaml# Some retrievable parametersparameters:uploads_directory: '%kernel.project_dir%/public/uploads'download_directory: '%kernel.project_dir%/public/downloads'services:# default configuration for services in *this* file_defaults:autowire: true# Automatically injects dependencies in your services.autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.

知道已启用这些属性, 并且你需要从服务或控制器获取一些X参数, 就可以继续执行下一步了。
2.创建细枝扩展【如何在Symfony 4的Twig视图中从services.yaml中检索特定和所有YAML参数】为了从Twig视图中检索参数, 我们将需要在PHP中创建一个允许我们这样做的函数。你可以在app / src / Service目录中创建具有以下内容的TwigExtensions.php文件:
< ?php// app/src/Service/TwigExtensions.phpnamespace App\Service; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; class TwigExtensions extends \Twig_Extension{protected $params; public function getFunctions(){return [new \Twig_SimpleFunction('get_parameter', array($this, 'getParameter'))]; }public function __construct(ParameterBagInterface $params){$this-> params = $params; }public function getParameter($parameter){return $params-> get($parameter); }public function getName(){return 'TwigExtensions'; }}

此扩展将为Twig添加一个新函数, 即get_parameter。该函数将以字符串形式接收参数名作为第一个参数, 它将返回它, 就是这样!
3.从Twig检索参数现在, 在Twig视图中, 你将能够从services.yaml文件中获取参数。例如, 给定以下参数:
# app/config/services.yamlparameters:genres_image_directory: '%kernel.project_dir%/public/uploads/genres'songs_image_directory: '%kernel.project_dir%/public/uploads/songs'songs_directory: '%kernel.project_dir%/songs'packages_directory: '%kernel.project_dir%/songs/package'

你可以通过以下方式在视图中获取它们:
{# Outputs: /var/www/vhosts/app/songs #}{{ get_parameter("songs_directory") }}{# Outputs: /var/www/vhosts/app/public/uploads/genres #}{{ get_parameter("genres_image_directory") }}

编码愉快!

    推荐阅读