本文概述
在较旧版本的Symfony中, 我们曾经在config.yml文件中定义在部署计算机上没有更改的参数:
# app/config/config.yml
# ...
parameters:
locale: en
framework:
# ...
# any string surrounded by two % is replaced by that parameter value
default_locale: "%locale%"
# ...
但是, 在Symfony 4中, 可以在此处使用的许多变量移到了env文件中, 或者在services.yaml文件中的部署机器上未更改的那些变量。对于使用此版本框架的许多新开发人员来说, 通常不清楚如何在项目中最常见的位置(如Controllers and Services)中检索那些参数, 但是我们在本文中写了如何检索它们。我们没有解释如何从Twig视图中检索它们。第一种选择是像这样在Twig中将它们公开为全局变量:
# config/packages/twig.yaml
twig:
# ...
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 parameters
parameters:
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.创建细枝扩展
为了从Twig视图中检索参数, 我们将需要在PHP中创建一个允许我们这样做的函数。你可以在app / src / Service目录中创建具有以下内容的TwigExtensions.php文件:
<?php
// app/src/Service/TwigExtensions.php
namespace 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.yaml
parameters:
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") }}
编码愉快!
评论前必须登录!
注册