craue/twigextensions-bundle

为您的 Symfony 项目提供有用的 Twig 扩展。

安装数: 193,549

依赖者: 2

建议者: 0

安全: 0

星标: 78

关注者: 5

分支: 11

开放问题: 1

类型:symfony-bundle

2.9.0 2022-01-24 15:19 UTC

README

Build Status

TwigExtensionsBundle 是为您的 Symfony 项目提供的一组有用的 Twig 扩展。

http://craue.de/symfony-playground/en/CraueTwigExtensions/ 上提供了一个包含代码示例的实时演示。

DecorateEmptyValueExtension

提供了一个增强的 default 过滤器,craue_default,用于使用占位符装饰空值,甚至可以是 HTML。

通常,如果您想在 HTML 模板中使用 HTML,例如 HTML 实体 — 作为默认过滤器中的值,您必须做繁琐的操作

{{ somevalue | e | default('—') | raw }}

以使其正确渲染。使用此扩展,您可以写入

{{ somevalue | craue_default }}

代替。

ArrayHelperExtension

提供了以下过滤器

  • craue_without 包装 PHP 的 array_diff 函数,
  • craue_replaceKey 添加/替换数组条目(此时键可以是变量),
  • craue_removeKey 通过键(此时键可以是变量)删除数组条目,以及
  • craue_translateArray 将数组中的所有条目进行翻译。

FormExtension

提供了一种机制,可以在一个页面上多次渲染表单。这是通过在渲染之前使用 craue_cloneForm 函数克隆表单来实现的。

StringHelperExtension

提供了 craue_trailingDot 过滤器,以确保文本以点结尾。这在使用供应商包的错误消息(例如验证)时非常有用(这些错误消息像句子一样编写,但缺少尾点),以及与您自己的错误消息(应包含尾点)一起使用。

FormatDateTimeExtension

提供了 craue_datecraue_timecraue_datetime 过滤器,用于对日期、时间和日期/时间值进行区域感知格式化。

FormatNumberExtension

提供了 craue_numbercraue_currencycraue_spellout 过滤器,用于对数字和货币进行区域感知格式化。

ChangeLanguageExtension

提供了 craue_languageNamecraue_availableLocales 函数以及一个模板来实现语言更改机制。

安装

获取包

在 shell 中运行以下命令以让 Composer 下载并安装包:

composer require craue/twigextensions-bundle

启用包

如果您不使用 Symfony Flex,则手动注册包

// in config/bundles.php
return [
	// ...
	Craue\TwigExtensionsBundle\CraueTwigExtensionsBundle::class => ['all' => true],
];

或者,对于 Symfony 3.4

// in app/AppKernel.php
public function registerBundles() {
	$bundles = [
		// ...
		new Craue\TwigExtensionsBundle\CraueTwigExtensionsBundle(),
	];
	// ...
}

在您的 Twig 模板中使用扩展的示例

DecorateEmptyValueExtension

{{ someValueWhichMayBeEmpty | craue_default }}<br />
{{ someValueWhichMayBeEmpty | craue_default('no value') }}<br />
{{ someValueWhichMayBeEmpty | craue_default('&ndash;') }}<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_removeKey(key) | join(', ') }}<br />
{{ {'key1': 'value1', 'key2': 'value2'} | craue_removeKey('key1') | join(', ') }} will print "value2"

{{ 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 '@CraueTwigExtensions/ChangeLanguage/changeLanguage.html.twig' %}

这将渲染到所有定义的语言中当前路由的链接列表。将其包裹在 div 中以通过 CSS 进行样式化。如果您想自定义它,请查看模板。

设置/覆盖默认值

DecorateEmptyValueExtension

# in app/config/parameters.yml
  craue_twig_extensions.decorateEmptyValue.placeholder: &ndash;

FormatDateTimeExtension

# in app/config/parameters.yml
  craue_twig_extensions.formatDateTime.datetype: full
  craue_twig_extensions.formatDateTime.timetype: short
  craue_twig_extensions.formatDateTime.timeZone: Europe/Berlin

FormatNumberExtension

# in app/config/parameters.yml
  craue_twig_extensions.formatNumber.currency: EUR

ChangeLanguageExtension

# in app/config/parameters.yml
  craue_twig_extensions.changeLanguage.availableLocales: [de, en, ru]
  craue_twig_extensions.changeLanguage.showForeignLanguageNames: true
  craue_twig_extensions.changeLanguage.showFirstUppercase: false

您还可以设置键以更具体地说明区域

# in app/config/parameters.yml
  craue_twig_extensions.changeLanguage.availableLocales:
    de_DE: de
    en: en
    ru: ru
<!-- in app/config/parameters.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,这使得您可以写

{{ somevalue | d }}

在您的Twig模板中使用。但请注意,不要意外地覆盖内置的过滤器/函数,尽管您可以有意为之。

DecorateEmptyValueExtension

# in app/config/parameters.yml
  craue_twig_extensions.decorateEmptyValue.filterAlias: d

ArrayHelperExtension

# in app/config/parameters.yml
  craue_twig_extensions.arrayHelper.withoutAlias: without
  craue_twig_extensions.arrayHelper.replaceKeyAlias: replaceKey
  craue_twig_extensions.arrayHelper.removeKeyAlias: removeKey
  craue_twig_extensions.arrayHelper.translateArrayAlias: translateArray

FormExtension

# in app/config/parameters.yml
  craue_twig_extensions.form.cloneFormAlias: cloneForm

StringHelperExtension

# in app/config/parameters.yml
  craue_twig_extensions.stringHelper.trailingDotAlias: trailingDot

FormatDateTimeExtension

# in app/config/parameters.yml
  craue_twig_extensions.formatDateTime.dateFilterAlias: date
  craue_twig_extensions.formatDateTime.timeFilterAlias: time
  craue_twig_extensions.formatDateTime.dateTimeFilterAlias: datetime

FormatNumberExtension

# in app/config/parameters.yml
  craue_twig_extensions.formatNumber.numberFilterAlias: number
  craue_twig_extensions.formatNumber.currencyFilterAlias: currency
  craue_twig_extensions.formatNumber.spelloutFilterAlias: spellout

ChangeLanguageExtension

# in app/config/parameters.yml
  craue_twig_extensions.changeLanguage.languageNameAlias: languageName
  craue_twig_extensions.changeLanguage.availableLocalesAlias: availableLocales

仅启用特定扩展

默认情况下,所有提供的扩展都已启用。如果您只使用一个或其中几个,您可能想禁用其他扩展。以下代码启用了所有扩展,因此请删除您不需要的扩展。

# in app/config/config.yml
craue_twig_extensions:
  enable_only:
    - ArrayHelperExtension
    - ChangeLanguageExtension
    - DecorateEmptyValueExtension
    - FormatDateTimeExtension
    - FormatNumberExtension
    - FormExtension
    - StringHelperExtension