mho79 / twigextensions-bundle
为您的 Symfony2 项目提供有用的 Twig 扩展。
Requires
- php: >=5.3.2
This package is not auto-updated.
Last update: 2018-06-29 09:29:19 UTC
README
TwigExtensionsBundle 只是我找到的一些有用的 Twig 扩展的集合。
可以在以下地址找到包含代码示例的实时演示:http://craue.de/sf2playground/en/CraueTwigExtensions/。
此扩展应与 Symfony2 一起使用。
DecorateEmptyValueExtension
提供增强的 default 过滤器,craue_default,用于使用占位符装饰空值,甚至可以是 HTML。
通常,如果您想在 HTML 模板中使用 HTML,例如 HTML 实体 "—",作为默认过滤器的值,您必须做繁琐的操作才能使其正确渲染。使用此扩展,您可以写
{{ somevalue | e | default('—') | raw }}
而不是。
{{ somevalue | craue_default }}
ArrayHelperExtension
提供以下过滤器
craue_without包装 PHP 的array_diff函数,craue_replaceKey添加/替换数组条目(其中键可以是变量),以及craue_translateArray将数组中的所有条目翻译。
FormExtension
提供一种机制,可以在一个页面上多次渲染表单。这是通过使用 craue_cloneForm 函数在渲染之前克隆表单来完成的。
StringHelperExtension
提供 craue_trailingDot 过滤器,确保文本以句点结尾。当使用供应商包的错误消息(例如验证)时,这很有用(这些错误消息被写成句子,但没有结尾的句点),同时使用您自己的错误消息(应包括结尾的句点)。
FormatDateTimeExtension
提供 craue_date、craue_time 和 craue_datetime 过滤器,用于对日期、时间和日期/时间值进行区域设置感知的格式化。
FormatNumberExtension
提供 craue_number、craue_currency 和 craue_spellout 过滤器,用于对数字和货币进行区域设置感知的格式化。
ChangeLanguageExtension
提供辅助工具(函数 craue_languageName、全局 craue_availableLocales)和模板,用于实现语言更改机制。
安装
将 TwigExtensionsBundle 添加到您的 vendor 目录
通过使用 Git 子模块
git submodule add https://github.com/craue/TwigExtensionsBundle.git vendor/bundles/Craue/TwigExtensionsBundle
或者通过使用 deps 文件
[CraueTwigExtensionsBundle]
git=https://github.com/craue/TwigExtensionsBundle.git
target=bundles/Craue/TwigExtensionsBundle
将 TwigExtensionsBundle 添加到您的应用程序内核
// app/AppKernel.php
public function registerBundles() {
$bundles = array(
// ...
new Craue\TwigExtensionsBundle\CraueTwigExtensionsBundle(),
);
// ...
}
注册 Craue 命名空间
// app/autoload.php
$loader->registerNamespaces(array(
// ...
'Craue' => __DIR__.'/../vendor/bundles',
));
通过更新您的配置使Twig扩展可用
// app/config/config.yml
craue_twig_extensions: ~
在您的Twig模板中使用扩展的示例
DecorateEmptyValueExtension
{{ someValueWhichMayBeEmpty | craue_default }}<br />
{{ someValueWhichMayBeEmpty | craue_default('no value') }}<br />
{{ someValueWhichMayBeEmpty | craue_default('–') }}<br />
{{ someValueWhichMayBeEmpty | craue_default(0) }}
ArrayHelperExtension
{{ anArray | craue_without(aValueOrAnArray) | join(', ') }}<br />
{{ ['red', 'green', 'yellow', 'blue'] | craue_without('yellow') | join(', ') }} will print "red, green, blue"<br />
{{ ['red', 'green', 'yellow', 'blue'] | craue_without(['yellow', 'black', 'red']) | join(', ') }} will print "green, blue"
{{ anArray | craue_replaceKey(key, value) | join(', ') }}<br />
{% set newKey = 'key3' %}
{{ {'key1': 'value1', 'key2': 'value2'} | craue_replaceKey(newKey, 'value3') | join(', ') }} will print "value1, value2, value3"
{{ anArray | craue_translateArray() | join(', ') }}<br />
FormExtension
{% for myEntity in myEntities %}
{% set myFormInstance = craue_cloneForm(myForm) %}
<form action={{ path('my_route', {'id': myEntity.getId()}) }} method="post" {{ form_enctype(myFormInstance) }}>
{{ form_widget(myFormInstance) }}
<input type="submit" />
</form>
{% endfor %}
StringHelperExtension
{{ aString | craue_trailingDot }}<br />
{{ 'This text should end with a dot' | craue_trailingDot }}<br />
{{ 'This text should end with exactly one dot.' | craue_trailingDot }}
FormatDateTimeExtension
<h2>with the current locale</h2>
date: {{ someDateTimeValue | craue_date }}<br />
time: {{ someDateTimeValue | craue_time }}<br />
both: {{ someDateTimeValue | craue_datetime }}
<h2>with a specific locale</h2>
date: {{ someDateTimeValue | craue_date('de-DE') }}<br />
time: {{ someDateTimeValue | craue_time('de') }}<br />
both: {{ someDateTimeValue | craue_datetime('en-GB') }}
FormatNumberExtension
<h2>with the current locale</h2>
thousands separator: {{ someNumber | craue_number }}<br />
default currency: {{ someNumber | craue_currency }}<br />
specific currency: {{ someNumber | craue_currency('EUR') }}<br />
spelled out number: {{ someNumber | craue_spellout }}
<h2>with a specific locale</h2>
thousands separator: {{ someNumber | craue_number('de-DE') }}<br />
default currency: {{ someNumber | craue_currency(null, 'de-DE') }}<br />
specific currency: {{ someNumber | craue_currency('EUR', 'de-DE') }}<br />
spelled out number: {{ someNumber | craue_spellout('de-DE') }}
ChangeLanguageExtension
提供了一个Twig模板,您可以使用它来渲染一个“更改语言”菜单,如下所示
{% include 'CraueTwigExtensionsBundle:ChangeLanguage:changeLanguage.html.twig' %}
这将渲染指向当前路由的所有定义语言的链接列表。将其包裹在div中,以便通过CSS进行样式化。如果您想自定义它,请查看模板。
设置/覆盖默认值
DecorateEmptyValueExtension
; app/config/parameters.ini
craue_twig_extensions.decorateEmptyValue.placeholder="–"
FormatDateTimeExtension
; app/config/parameters.ini
craue_twig_extensions.formatDateTime.datetype="full"
craue_twig_extensions.formatDateTime.timetype="short"
FormatNumberExtension
; app/config/parameters.ini
craue_twig_extensions.formatNumber.currency="EUR"
ChangeLanguageExtension
; app/config/parameters.ini
craue_twig_extensions.changeLanguage.availableLocales[]="de"
craue_twig_extensions.changeLanguage.availableLocales[]="en"
craue_twig_extensions.changeLanguage.availableLocales[]="ru"
craue_twig_extensions.changeLanguage.showForeignLanguageNames=true
craue_twig_extensions.changeLanguage.showFirstUppercase=false
例如,您还可以使用XML来更具体地设置区域键
<parameter key="craue_twig_extensions.changeLanguage.availableLocales" type="collection">
<parameter key="de_DE">de</parameter>
<parameter key="en">en</parameter>
<parameter key="ru">ru</parameter>
</parameter>
高级内容
别名
可选地,您可以为项目中使用的所有提供的过滤器/函数/全局变量定义别名。这允许您使用您喜欢的名称而不是预定义的名称。例如,如果您不喜欢总是写
{{ somevalue | craue_default }}
,您可以为craue_default过滤器定义别名"d",这样您就可以在您的Twig模板中这样写
{{ somevalue | d }}
。但请注意,不要意外地覆盖内置的过滤器/函数/全局变量,尽管您可以有意为之。
DecorateEmptyValueExtension
; app/config/parameters.ini
craue_twig_extensions.decorateEmptyValue.filterAlias="d"
ArrayHelperExtension
; app/config/parameters.ini
craue_twig_extensions.arrayHelper.withoutAlias="without"
craue_twig_extensions.arrayHelper.replaceKeyAlias="replaceKey"
craue_twig_extensions.arrayHelper.translateArrayAlias="translateArray"
FormExtension
; app/config/parameters.ini
craue_twig_extensions.form.cloneFormAlias="cloneForm"
StringHelperExtension
; app/config/parameters.ini
craue_twig_extensions.stringHelper.trailingDotAlias="trailingDot"
FormatDateTimeExtension
; app/config/parameters.ini
craue_twig_extensions.formatDateTime.dateFilterAlias="date"
craue_twig_extensions.formatDateTime.timeFilterAlias="time"
craue_twig_extensions.formatDateTime.dateTimeFilterAlias="datetime"
FormatNumberExtension
; app/config/parameters.ini
craue_twig_extensions.formatNumber.numberFilterAlias="number"
craue_twig_extensions.formatNumber.currencyFilterAlias="currency"
craue_twig_extensions.formatNumber.spelloutFilterAlias="spellout"
ChangeLanguageExtension
; app/config/parameters.ini
craue_twig_extensions.changeLanguage.languageNameAlias="languageName"
craue_twig_extensions.changeLanguage.availableLocalesAlias="availableLocales"
仅启用特定扩展
默认情况下,所有提供的扩展都已启用。如果您只使用一个或其中一些,可能希望禁用其他扩展。以下命令将启用所有扩展,因此请删除您不需要的扩展。
// app/config.yml
craue_twig_extensions:
enable_only:
- ArrayHelperExtension
- ChangeLanguageExtension
- DecorateEmptyValueExtension
- FormatDateTimeExtension
- FormatNumberExtension
- FormExtension
- StringHelperExtension