よく使われる Twig エクステンション
このドキュメントでは、テンプレートを強化できる、よく使われるサードパーティーの Twig エクステンションを紹介します。
インストール
Composer でエクステンションをインストールし、config/bootstrap.php (レガシーレイアウトでは app/Config/bootstrap.php) で登録します。
php
Configure::write('TwigView.extensions', [
'ExtensionClassName',
]);Twig エクステンション
twig/intl-extra
PHP の intl 拡張モジュールを使った国際化のフィルターと関数です。
bash
composer require twig/intl-extraphp
use Twig\Extra\Intl\IntlExtension;
Configure::write('TwigView.extensions', [
new IntlExtension(),
]);機能:
twig
{# Format currency #}
{{ '1000.50'|format_currency('USD') }} {# $1,000.50 #}
{# Format numbers #}
{{ '1234.56'|format_number }} {# 1,234.56 #}
{# Format dates #}
{{ user.created|format_date('long') }}
{# Format datetime #}
{{ user.created|format_datetime('medium', 'short') }}twig/string-extra
文字列を操作する追加のフィルターです。
bash
composer require twig/string-extraphp
use Twig\Extra\String\StringExtension;
Configure::write('TwigView.extensions', [
new StringExtension(),
]);機能:
twig
{# Truncate string #}
{{ 'Lorem ipsum dolor'|u.truncate(10, '...') }} {# Lorem ipsu... #}
{# Word wrap #}
{{ long_text|u.wordwrap(80) }}
{# Camelcase #}
{{ 'hello world'|u.camel }} {# helloWorld #}
{# Snake case #}
{{ 'HelloWorld'|u.snake }} {# hello_world #}
{# ASCII transliteration #}
{{ 'Tëst'|u.ascii }} {# Test #}twig/html-extra
HTML の操作と生成です。
bash
composer require twig/html-extraphp
use Twig\Extra\Html\HtmlExtension;
Configure::write('TwigView.extensions', [
new HtmlExtension(),
]);機能:
twig
{# Add CSS classes #}
<div class="{{ 'foo'|classes('bar', 'baz') }}">
{# Generate HTML attributes #}
<input {{ html_attributes({type: 'text', name: 'email'}) }}>twig/markdown-extra
テンプレートでの Markdown のレンダリングです。
bash
composer require twig/markdown-extra
composer require league/commonmark # or michelf/php-markdownphp
use Twig\Extra\Markdown\MarkdownExtension;
Configure::write('TwigView.extensions', [
new MarkdownExtension(),
]);機能:
twig
{# Render markdown #}
{{ '**bold** text'|markdown_to_html }}
{# Markdown block #}
{% apply markdown_to_html %}
# Heading
This is **markdown** content.
{% endapply %}twig/cssinliner-extra
メールテンプレート用に CSS のスタイルをインライン化します。
bash
composer require twig/cssinliner-extra
composer require tijsverkoyen/css-to-inline-stylesphp
use Twig\Extra\CssInliner\CssInlinerExtension;
Configure::write('TwigView.extensions', [
new CssInlinerExtension(),
]);機能:
twig
{% apply inline_css %}
<html>
<head>
<style>
h1 { color: red; }
</style>
</head>
<body>
<h1>Hello</h1>
</body>
</html>
{% endapply %}
{# Output: <h1 style="color: red;">Hello</h1> #}twig/inky-extra
Foundation for Emails フレームワークとの統合です。
bash
composer require twig/inky-extra
composer require hampe/inkyphp
use Twig\Extra\Inky\InkyExtension;
Configure::write('TwigView.extensions', [
new InkyExtension(),
]);機能:
twig
{% apply inky_to_html %}
<row>
<columns large="6"></columns>
<columns large="6"></columns>
</row>
{% endapply %}サードパーティーのエクステンション
aptoma/twig-markdown
複数のパーサーをサポートする、もう 1 つの Markdown エクステンションです。
bash
composer require aptoma/twig-markdownjasny/twig-extensions
日付、PCRE、テキスト、配列のフィルターなど、便利なエクステンションを集めたものです。
NOTE
このエクステンションは CakePHP 5.x 向けの cakephp/twig-view で使われていますが、メンテナンス性と互換性のため、できるだけ Twig の組み込み機能や公式の Twig Extra エクステンションを使うことをお勧めします。
bash
composer require jasny/twig-extensions機能:
- 日付の操作
- PCRE の正規表現関数
- テキストの整形
- 配列の操作
カスタムエクステンションの作成
独自のエクステンションを作成する方法は 設定 をご覧ください。
構成の例:
php
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
use Twig\TwigFunction;
class MyExtension extends AbstractExtension
{
public function getFilters(): array
{
return [
new TwigFilter('my_filter', [$this, 'myFilter']),
];
}
public function getFunctions(): array
{
return [
new TwigFunction('my_function', [$this, 'myFunction']),
];
}
public function myFilter($value)
{
return strtoupper($value);
}
public function myFunction($arg)
{
return 'Result: ' . $arg;
}
}リソース
- 公式の Twig エクステンション - Twig チームがメンテナンスしています
- Twig のドキュメント - Twig の完全なリファレンス
- エクステンションの作成 - 公式ガイド
