symfony - 如何使用自定义函数 Twig-symfony

标签 symfony twig fosuserbundle

我们有一个 Symfony 3.4 项目,带有 FOSUserBundle 的 Twig 模板和身份验证系统。
它是多域的,主要管理客户和供应商数据运行良好,但现在我在用户注册时遇到了不知道如何解决的问题。
我需要根据域的不同,它可以在注册时显示一个或另一个 Twig 模板。
搜索文档并找到如何编写自定义 Twig 扩展
https://symfony.com/doc/3.4/templating/twig_extension.html
这是我的功能,几乎就像示例中的功能一样

<?php

// src/AppBundle/Twig/AppExtension.php
namespace AppBundle\Twig;

use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;

class AppExtension extends AbstractExtension
{
    public function getFunctions()
    {
        return [
            new TwigFunction('server', [$this, 'serverName']),
        ];
    }

    public function calculateArea(int $width, int $length)
    {
        return $width * $length;
    }

    public function serverName()
    {
        $serverName = "$_SERVER[SERVER_NAME]";
        return $serverName;
    }
}
问题是,如何在 Twig 中使用我的函数?我需要基于它连接的域,它向我们展示了一个注册表或类似的东西:
{% extends "@FOSUser/layout.html.twig" %}

{% block fos_user_content %}

    {% if serverName == "xxxxx"%}
        {% include "@FOSUser/Registration/register_content_cliente.html.twig" %}
    {% else %}
        {% include "@FOSUser/Registration/register_content_proveedor.html.twig" %}
    {% endif %}
    
{% endblock fos_user_content %}
它不是这样工作的:
{{ serverName }}
{{ server }}

{% serverName %}
{% server %}

最佳答案

就像使用 php 一样,您必须使用 () 调用函数,所以 serverName() server() ,因为这就是您在 AppExtension::getFunctions() 中调用的函数(第一个论点)。
您可能想用所谓的 test 替换该函数.然后你可以做这样的事情:

{% if 'example.com' is serverName %}
{% endif %}
代码可能类似于:
class AppExtension extends AbstractExtension
{
    public function getTests()
    {
        return [
            new TwigTest('serverName', [$this, 'isServerName']),
        ];
    }

    public function isServerName(string $serverName)
    {
        return $serverName === $_SERVER[SERVER_NAME];
    }
}
或者,在您的模板中,您始终可以使用变量 app.request 访问请求。您可以使用 Symfony 的 Request 对象上的方法之一询问当前服务器名称。例如,您可以使用 Request::getHost()比较:
{% if app.request.host == 'example.com' %}
{% endif %}
无需功能或测试或其他 Twig 扩展。

关于symfony - 如何使用自定义函数 Twig-symfony,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62985404/

相关文章:

php - 删除 Symfony 中父类的映射学说字段 [FOSUserBundle]

php - 如何在 FOSUserBundle 中添加和管理 ROLES?

php - 更正 Oracle 上的 Doctrine 日期时间

arrays - Twig 模板 : Add html in JOIN function

php - 令人难以置信的慢缓存 :clear of symfony in dev environment

php - 使用 Twig 渲染 CSS 文件

symfony - FOSUserBundle ,法语翻译被忽略

php - 如何将 CONCAT_WS 与 IN 一起使用?

Symfony2 : How to set the root path in a Symfony CLI command

php - symfony 2 按模型路由