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
映射到strtolower
up
映射到strtoupper
env
映射到env
pluralize
映射到Cake\Utility\Inflector::pluralize
singularize
映射到Cake\Utility\Inflector::singularize
camelize
映射到Cake\Utility\Inflector::camelize
underscore
映射到Cake\Utility\Inflector::underscore
humanize
映射到Cake\Utility\Inflector::humanize
tableize
映射到Cake\Utility\Inflector::tableize
classify
映射到Cake\Utility\Inflector::classify
variable
映射到Cake\Utility\Inflector::variable
slug
映射到Cake\Utility\Inflector::slug
toReadableSize
映射到Cake\I18n\Number::toReadableSize
toPercentage
映射到Cake\I18n\Number::toPercentage
cake_number_format
映射到Cake\I18n\Number::format
formatDelta
映射到Cake\I18n\Number::formatDelta
currency
映射到Cake\I18n\Number::currency
substr
映射到substr
tokenize
映射到Cake\Utility\Text::tokenize
insert
映射到Cake\Utility\Text::insert
cleanInsert
映射到Cake\Utility\Text::cleanInsert
wrap
映射到Cake\Utility\Text::wrap
wrapBlock
映射到Cake\Utility\Text::wrapBlock
wordWrap
映射到Cake\Utility\Text::wordWrap
highlight
映射到Cake\Utility\Text::highlight
tail
映射到Cake\Utility\Text::tail
truncate
映射到Cake\Utility\Text::truncate
excerpt
映射到Cake\Utility\Text::excerpt
toList
映射到Cake\Utility\Text::toList
stripLinks
映射到Cake\Utility\Text::stripLinks
isMultibyte
映射到Cake\Utility\Text::isMultibyte
utf8
映射到Cake\Utility\Text::utf8
ascii
映射到Cake\Utility\Text::ascii
parseFileSize
映射到Cake\Utility\Text::parseFileSize
serialize
映射到serialize
unserialize
映射到unserialize
md5
映射到md5
base64_encode
映射到base64_encode
base64_decode
映射到base64_decode
string
强制类型转换为string
查看 jasny/twig-extensions
了解它们提供的过滤器。
扩展函数
in_array
映射到in_array
explode
映射到explode
array
强制类型转换为array
array_push
映射到push
array_prev
映射到prev
array_next
映射到next
array_current
映射到current
__
映射到__
__d
映射到__d
__n
映射到__n
__x
映射到__x
__dn
映射到__dn
defaultCurrency
映射到Cake\I18n\Number::getDefaultCurrency
uuid
映射到Cake\Utility\Text::uuid
time
将第一个和可选的第二个参数传递给new \Cake\I18n\DateTime()
timezones
映射到Cake\I18n\DateTime::listTimezones()
查看 jasny/twig-extensions
了解它们提供的函数。