在国际扩展是枝条的延伸,增加了的localizeddate
,localizednumber
和localizedcurrency
过滤器.如何安装和设置扩展程序,以便在Twig模板中使用这些过滤器?
如何在Symfony 4 .env
中的自定义Twig函数(\Twig_SimpleFunction
)中使用文件中的环境变量?
如何从当天获得天差异.
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) 我正在尝试使用捆绑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)
提前致谢!
如何在symfony模板中拥有全局变量?我确实读过这个, 但我更喜欢从数据库中获取参数,我认为这个服务将在启动之前加载,然后才能从db中获取任何内容.是否有可能这样做?
我想自动换行一些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中知道这些变量的上下文.
我试图重写Compiler
的Twig_Environment
用途,但我似乎无法改变树枝变量节点的输出.
我怎样才能做到这一点?
编辑
我想提一下,我需要这个来使用{{ product.name }}
语法,因为其他设计师将使用Symfony 2之外的那些模板.我想在前端编辑几乎所有的枝条变量,所以带过滤器或宏的解决方案确实可以工作,但它会破坏我正在编写的平台的可用性和可读性.目前在twig中没有可以实现我想要的公共API,这就是为什么我在摆弄twig编译器.我没有必要的Twig内部知识来实现这一目标.如果有人能够指出我的方向会很棒!
更新2
我找到了一个可以达到我想要的地方.每个GetAttr
节点都编译为$this->getAttribute($someContext, "property")
.因此,如果我可以更改已编译的twig模板的子类,我可以实现我想要的.默认情况下,所有树枝模板都从Twig_Template
.我想扩展这个方法.
如何更改所有已编译的twig模板的子类?
更新3
我找到了一种方法来为所有已编译的树枝模板使用我自己的基类.我可以简单地将它设置为树枝环境中的一个选项,请参阅此链接.我希望明天能够开始工作,我将就如何一起解决这个问题发表一个正确的答案.不确定我将如何处理转义,因为这将在$this->getAttribute()
调用之后发生.
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 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
是否有其他过滤器或只是另一种方法来替换它?
看来争论没有正确通过......
{% 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) 我最近正在使用 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 ×10
twig-extension ×10
symfony ×5
php ×4
bundle ×1
composer-php ×1
doctrine-orm ×1
intl ×1
symfony4 ×1
twig-filter ×1