个性化阅读
专注于IT技术分析

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

本文概述

在较旧版本的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") }}

编码愉快!

赞(0)
未经允许不得转载:srcmini » 如何在Symfony 4的Twig视图中从services.yaml中检索特定和所有YAML参数

评论 抢沙发

评论前必须登录!