标签: twig-extension

如何安装Twig的Intl扩展

国际扩展是枝条的延伸,增加了的localizeddate,localizednumberlocalizedcurrency过滤器.如何安装和设置扩展程序,以便在Twig模板中使用这些过滤器?

php intl twig twig-extension

25
推荐指数
1
解决办法
2万
查看次数

在Symfony 4中的自定义Twig函数中使用环境变量(来自`.env`文件)

如何在Symfony 4 .env中的自定义Twig函数(\Twig_SimpleFunction)中使用文件中的环境变量?

environment-variables twig twig-extension symfony4

11
推荐指数
3
解决办法
1万
查看次数

如何在树枝上获得天差

  • 如何从当天获得天差异.

  • tweetedAt:"2015-02-22 09:56:42".

枝条

{% for key,value in data.about %}
{% set tweets_date=(value.tweetedAt|date).date("now").format('%a') %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

我也试过了

{% set dd='now'|date('d-m-Y') %}
{% set tweets_date=(value.tweetedAt|date).dd.format('%a') %}
Run Code Online (Sandbox Code Playgroud)

最后我试了但是给出了错误:

散列键必须是带引号的字符串,数字,名称或括在括号中的表达式(值为"{"的意外标记"标点符号")

{% set difference = {{ date("m/d/Y") }}.diff(date(value.tweetedAt)) %}
{% set leftDays = difference.days %}
Run Code Online (Sandbox Code Playgroud)

错误:

<span class="small light_grey">{{tweets_date}}</span>

Impossible to invoke a method ("date") on a string variable ("June 6, 2015 01:06") in AcmeBundle
Run Code Online (Sandbox Code Playgroud)
  • 如何从tweet_date几天前的形式获得差异.

twig/extensions通过composer 更新了我的项目安装

user@intermsh-OptiPlex-380:~$ composer require twig/extensions
Warning: This development build of composer is over …
Run Code Online (Sandbox Code Playgroud)

php symfony twig twig-extension

8
推荐指数
2
解决办法
8171
查看次数

供应商包的视图中不存在过滤器"truncate"(twig)

我正在尝试使用捆绑JMS Translation但我有这个错误.我猜是因为我的twig版本与捆绑版本不一样?该怎么办?

CRITICAL - Uncaught PHP Exception Twig_Error_Syntax: "The filter "truncate" does not exist in "...\vendor\jms\translation-bundle\JMS\TranslationBundle/Resources/views/Translate/messages.html.twig" at line 14" at ...\vendor\twig\twig\lib\Twig\ExpressionParser.php line 588 
Run Code Online (Sandbox Code Playgroud)

这是我在composer.json中的要求:

 "require": {
        ...
        "twig/extensions": "~1.2.0",
Run Code Online (Sandbox Code Playgroud)

以下是JMS Translation的作曲家:

"conflict": {
    "twig/twig": "1.10.2"
},
"require-dev": {
    "symfony/twig-bundle": "*",
Run Code Online (Sandbox Code Playgroud)

提前致谢!

bundle symfony twig composer-php twig-extension

7
推荐指数
2
解决办法
8148
查看次数

如何在symfony模板中有来自db的全局变量?

如何在symfony模板中拥有全局变量?我确实读过这个, 但我更喜欢从数据库中获取参数,我认为这个服务将在启动之前加载,然后才能从db中获取任何内容.是否有可能这样做?

symfony doctrine-orm twig twig-extension

6
推荐指数
1
解决办法
3939
查看次数

围绕特定树枝变量{{product.name}}包装上下文html

我想自动换行一些html,<span data-id="..">当我{{ product.name }}在我的twig模板中调用时,我就说.

所以当我在一个twig模板中使用时{{ product.name }},我希望输出为:<span data-type="product" data-id="8" data-prop="name">My product name</span>.我不能使用twig过滤器或宏,因为我真的需要模板语法{{ product.name }},所以最终用户(模板设计师)不必关心它.

我需要这个的原因是因为我正在为twig模板构建一个页面编辑工具,所以我需要从HTML中知道这些变量的上下文.

我试图重写CompilerTwig_Environment用途,但我似乎无法改变树枝变量节点的输出.

我怎样才能做到这一点?

编辑

我想提一下,我需要这个来使用{{ product.name }}语法,因为其他设计师将使用Symfony 2之外的那些模板.我想在前端编辑几乎所有的枝条变量,所以带过滤器或宏的解决方案确实可以工作,但它会破坏我正在编写的平台的可用性和可读性.目前在twig中没有可以实现我想要的公共API,这就是为什么我在摆弄twig编译器.我没有必要的Twig内部知识来实现​​这一目标.如果有人能够指出我的方向会很棒!

更新2

我找到了一个可以达到我想要的地方.每个GetAttr节点都编译为$this->getAttribute($someContext, "property").因此,如果我可以更改已编译的twig模板的子类,我可以实现我想要的.默认情况下,所有树枝模板都从Twig_Template.我想扩展这个方法.

如何更改所有已编译的twig模板的子类?

更新3 我找到了一种方法来为所有已编译的树枝模板使用我自己的基类.我可以简单地将它设置为树枝环境中的一个选项,请参阅此链接.我希望明天能够开始工作,我将就如何一起解决这个问题发表一个正确的答案.不确定我将如何处理转义,因为这将在$this->getAttribute()调用之后发生.

twig twig-extension

6
推荐指数
1
解决办法
537
查看次数

Symfony - Unable to register extension "AppBundle\Twig\Extension\FileExtension" as it is already registered

When I try to implement custom Twig Extension in Symfony2-project, I get following error:

Unable to register extension "AppBundle\Twig\Extension\FileExtension" as it is already registered.

In my app/config/services.yml, I have following:

parameters:
    app.file.twig.extension.class: AppBundle\Twig\Extension\FileExtension

services:
    app.twig.file_extension:
        class: '%app.file.twig.extension.class%'
        tags:
            - { name: 'twig.extension' }
Run Code Online (Sandbox Code Playgroud)

In AppBundle/Twig/Extensions/FileExtension, i have:

<?php

namespace AppBundle\Twig\Extension;

class FileExtension extends \Twig_Extension
{
    /**
     * Return the functions registered as twig extensions
     * 
     * @return array
     */
    public function getFunctions()
    {
        return array(
            new \Twig_SimpleFunction('file_exists', array($this, 'file_exists')),
        ); …
Run Code Online (Sandbox Code Playgroud)

symfony twig twig-extension

6
推荐指数
1
解决办法
4064
查看次数

如何替换 twig/extensions 中的“localizeddate”过滤器

我目前正在将我的项目更新到 Symfony 5.1(我之前使用的是 Symfony 4.1)。

更新时我注意到我无法twig/extensions再安装该软件包,这意味着我无法使用|localizeddate过滤器。

这基本上已经在这里讨论过:Composer can't install Twig Extensions

- twig/extensions v1.5.0 requires twig/twig ~1.27|~2.0
Run Code Online (Sandbox Code Playgroud)

根据我的composer.lock文件,安装了3.0.3

        ...
        {
            "name": "twig/twig",
            "version": "v3.0.3",
            ...
Run Code Online (Sandbox Code Playgroud)

但仅仅说某些东西不再可用并不能解决问题


我现在唯一的用例是以下代码:

{{ comment.publishedAt|localizeddate('medium', 'short', null, 'UTC') }}
Run Code Online (Sandbox Code Playgroud)

对于那些不熟悉的人来说,这是文档页面:https://twig-extensions.readthedocs.io/en/latest/intl.html#localizeddate

是否有其他过滤器或只是另一种方法来替换它?

php symfony twig twig-extension twig-filter

6
推荐指数
1
解决办法
2118
查看次数

将数组传递给包含在树枝中

看来争论没有正确通过......

    {% set items = {
        item: {
            'id': '1',
            'brand': 'client1',
            'description': 'solutions.client1.description' | trans},
        item: {
            'id':  '2',
            'brand': 'client2',
            'description': 'solutions.client2.description' | trans}
    } %}

    {% include 'site/case-excerpt.html.twig'
        with {'id': items.item.id,
              'brand': items.item.brand,
              'description': items.item.description
        }
  %}
Run Code Online (Sandbox Code Playgroud)

然后在site/case-excerpt.html.twig文件中:

{% include 'site/testimonials/item.html.twig'
     with {'id': id,
           'brand': brand,
           'description': description
          }
%}
Run Code Online (Sandbox Code Playgroud)

并在site/testimonials/item.html.twig文件中:

<div class="carousel-item {{ id }}">
    <img src="images/brands/{{ brand }}.jpg">
    <p>
        {{ description }}
    </p>
</div>
Run Code Online (Sandbox Code Playgroud)

预期输出如下:

<div class="carousel-item 1">
    <img src="images/brands/client1.jpg">
    <p> …
Run Code Online (Sandbox Code Playgroud)

php twig twig-extension

5
推荐指数
1
解决办法
1万
查看次数

Twig - 如果启用调试模式则显示模板名称

我最近正在使用 Twig,我想知道是否可以输出页面上加载的模板名称。我能想到的最好方法是将名称显示在模板本身上方作为 html 注释。

<!-- start @default/_components/_wrapper/form-wrapper.html.twig -->
    <form>
       ...
    </form>
<!-- end @default/_components/_wrapper/form-wrapper.html.twig -->
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过插入来获取模板名称{{ _self.templateName }},但我不喜欢将其添加到每个模板或部分模板中。

该解决方案应该适用于等{% include %}{% use %}如果它只是在启用调试模式时发生,那就太好了。

我尝试编写一个扩展,但无论我如何表达,我都必须在每个模板中进行某种调用。

这背后的原因是我试图减少搜索其他人实现的模板的时间,因为项目变得越来越大。

注意:我没有使用 Symfony。

提前致谢,感谢任何帮助!

twig twig-extension

5
推荐指数
1
解决办法
1521
查看次数