cakephp / twig-view
CakePHP 的 Twig 视图
Requires
- cakephp/cakephp: ^5.0.0
- jasny/twig-extensions: ^1.3
- twig/markdown-extra: ^3.0
- twig/twig: ^3.10.3
Requires (Dev)
- cakephp/cakephp-codesniffer: ^5.0
- cakephp/debug_kit: ^5.0
- cakephp/plugin-installer: ^1.3
- michelf/php-markdown: ^1.9
- mikey179/vfsstream: ^1.6.10
- phpunit/phpunit: ^10.1.0
Conflicts
README
此插件允许您在视图中使用 Twig 模板语言。
它为常见的视图操作提供了包装,并提供了许多有用的扩展,这些扩展暴露了 CakePHP 函数和 jasny/twig-extensions 辅助函数。
安装
使用 Composer 安装,请使用以下命令。
composer require cakephp/twig-view
然后,在您的 Application 引导文件中像其他 Cake 插件一样加载 Cake/TwigView 插件。
配置
TwigView 允许您通过 View 选项配置 Twig 环境。您可以通过 Controller 中的 ViewBuilder 设置这些选项,或者在 TwigView 中直接设置它们。
// In controller public function initialize(): void { $this->viewBuilder()->setOption('environment', ['cache' => false]); } // In your AppView public function initialize(): void { $this->setConfig('environment', ['cache' => false]); // Call parent TwigView initialize parent::initialize(); }
可用选项
-
环境默认为空。
-
markdown用于
markdown_to_html过滤器的 markdown 引擎。设置为default以使用DefaultMarkdown或设置自定义 Twig Markdown 扩展MarkdownInterface实例。如果使用
default,则需要以下之一:-erusev/parsedown-league/commonmark-michelf/php-markdown默认为禁用。
AppView 设置
要开始在您的应用程序中使用 Twig 模板,只需在您的 AppView 中扩展 TwigView。通常,在 AppView::initialize() 中添加您应用程序的设置是安全的。
namespace App\View; use Cake\TwigView\View\TwigView; class AppView extends TwigView { public function initialize(): void { parent::initialize(); // Add application-specific extensions } }
自定义
您可以通过覆盖 TwigView 初始化的几个部分来创建自定义的 Twig 设置。
-
文件扩展名
您可以通过覆盖
$extensions属性来指定用于搜索模板的文件扩展名。class AppView extends TwigView { protected $extensions = [ '.custom', ]; }
-
Twig 加载器
您可以通过覆盖 Twig 使用的模板加载器。
protected function createLoader(): \Twig\Loader\LoaderInterface { // Return a custom Twig template loader }
-
Twig 扩展
您可以覆盖Twig扩展的加载。如果您想使用内置的
View包装器,请确保加载Cake\TwigView\Twig\Extensions\ViewExtension。protected function initializeExtensions(): void { // Load only specific extensions }
-
Twig 分析器
当加载
DebugKit时,您可以覆盖 Twig 分析器。protected function initializeProfiler(): void { parent::initializeProfiler(); // Add custom profiler logging using $this->getProfile() }
模板
您可以使用 Twig 模板创建视图,就像您可以使用标准的 CakePHP 模板一样。
模板的加载方式与其使用位置相同,并遵循 View 路径约定。
{% extends 'Common/base' %}
{{ include('Common/helper') }}
- 模板名称始终相对于
App.path.templates而不是当前文件。 - 文件扩展名将自动生成。默认为 '.twig'。
- 可以从插件加载模板,就像从
View模板一样。
布局模板受支持,并且以与 View 布局相同的方式加载。
templates/layout/default.twig:
<!DOCTYPE html> <html> <head> <title> {{ fetch('title') }} </title> {{ fetch('meta') }} {{ fetch('css') }} {{ fetch('script') }} </head> <body> {{ fetch('content') }} </body> </html>
您可以使用 layout 标签从模板中设置布局。
{% layout 'Error' %}
访问视图
您可以使用 _view 全局变量访问 View 实例。
TwigView 提供了 fetch()、cell() 和 element() 渲染的包装器。单元格和元素模板始终从 cell/ 和 element/ 子目录中加载,就像 View 模板一样。
{{ fetch('content')}}
{{ cell('myCell')}}
{{ element('myElement') }}
TwigView 还提供了任何加载的辅助函数的包装器,使用特殊的命名约定 - helper_Name_function()。
{{ helper_Text_autoParagraph('some text for a paragarph') }}
所有包装函数都是预先转义的,不需要使用 |raw 过滤器。然而,请注意,Twig 在使用 {{ }} 打印时保留了空白。请阅读 Twig 文档了解如何在需要时删除额外的空白。
扩展过滤器
low映射到strtolowerup映射到strtoupperenv映射到envpluralize映射到Cake\Utility\Inflector::pluralizesingularize映射到Cake\Utility\Inflector::singularizecamelize映射到Cake\Utility\Inflector::camelizeunderscore映射到Cake\Utility\Inflector::underscorehumanize映射到Cake\Utility\Inflector::humanizetableize映射到Cake\Utility\Inflector::tableizeclassify映射到Cake\Utility\Inflector::classifyvariable映射到Cake\Utility\Inflector::variableslug映射到Cake\Utility\Inflector::slugtoReadableSize映射到Cake\I18n\Number::toReadableSizetoPercentage映射到Cake\I18n\Number::toPercentagecake_number_format映射到Cake\I18n\Number::formatformatDelta映射到Cake\I18n\Number::formatDeltacurrency映射到Cake\I18n\Number::currencysubstr映射到substrtokenize映射到Cake\Utility\Text::tokenizeinsert映射到Cake\Utility\Text::insertcleanInsert映射到Cake\Utility\Text::cleanInsertwrap映射到Cake\Utility\Text::wrapwrapBlock映射到Cake\Utility\Text::wrapBlockwordWrap映射到Cake\Utility\Text::wordWraphighlight映射到Cake\Utility\Text::highlighttail映射到Cake\Utility\Text::tailtruncate映射到Cake\Utility\Text::truncateexcerpt映射到Cake\Utility\Text::excerpttoList映射到Cake\Utility\Text::toListstripLinks映射到Cake\Utility\Text::stripLinksisMultibyte映射到Cake\Utility\Text::isMultibyteutf8映射到Cake\Utility\Text::utf8ascii映射到Cake\Utility\Text::asciiparseFileSize映射到Cake\Utility\Text::parseFileSizeserialize映射到serializeunserialize映射到unserializemd5映射到md5base64_encode映射到base64_encodebase64_decode映射到base64_decodestring强制类型转换为string
查看 jasny/twig-extensions 了解它们提供的过滤器。
扩展函数
in_array映射到in_arrayexplode映射到explodearray强制类型转换为arrayarray_push映射到pusharray_prev映射到prevarray_next映射到nextarray_current映射到current__映射到____d映射到__d__n映射到__n__x映射到__x__dn映射到__dndefaultCurrency映射到Cake\I18n\Number::getDefaultCurrencyuuid映射到Cake\Utility\Text::uuidtime将第一个和可选的第二个参数传递给new \Cake\I18n\DateTime()timezones映射到Cake\I18n\DateTime::listTimezones()
查看 jasny/twig-extensions 了解它们提供的函数。