wyrihaximus / twig-view
CakePHP 的 Twig 视图组件
Requires
- php: ^7.2
- cakephp/cakephp: ^4.0
- jasny/twig-extensions: ^1.3
- twig/markdown-extra: ^3.0
- twig/twig: ^3.0
Requires (Dev)
- cakephp/cakephp-codesniffer: ^4.0
- cakephp/debug_kit: ^4.0
- jakub-onderka/php-console-highlighter: ^0.4.0
- jakub-onderka/php-parallel-lint: ^1.0
- phpunit/phpunit: ^8.0
- wyrihaximus/phpunit-class-reflection-helpers: dev-master
This package is auto-updated.
Last update: 2024-09-09 00:29:48 UTC
README
此插件允许您在视图中使用 Twig 模板语言。
除了启用使用 Twig 的大部分功能外,该插件与 CakePHP 视图渲染器紧密集成,使您能够完全访问助手、对象和元素。
已弃用:请使用 cakephp/twig-view 代替。
安装
要通过 Composer 安装,请使用以下命令。
composer require wyrihaximus/twig-view
配置
加载插件
运行以下 CLI 命令
bin/cake plugin load WyriHaximus/TwigView
使用 View 类
而不是从 View
扩展,让 AppView
从 TwigView
扩展
namespace App\View; use WyriHaximus\TwigView\View\TwigView; class AppView extends TwigView { }
快速入门
TwigView 将在其模板中寻找扩展名为 .twig
的文件。
布局
将 templates/layout/default.php
替换为 templates/layout/default.twig
<!DOCTYPE html> <html> <head> {{ Html.charset()|raw }} <title> {{ __('myTwigExample') }} {{ _view.fetch('title')|raw }} </title> {{ Html.meta('icon')|raw }} {{ Html.css('default.app.css')|raw }} {{ Html.script('app')|raw }} {{ _view.fetch('meta')|raw }} {{ _view.fetch('css')|raw }} {{ _view.fetch('script')|raw }} </head> <body> <header> {{ _view.fetch('header')|raw }} </header> {{ Flash.render()|raw }} <section> <h1>{{ _view.fetch('title')|raw }}</h1> {{ _view.fetch('content')|raw }} </section> <footer> {{ _view.fetch('footer')|raw }} </footer> </body> </html>
模板视图
创建一个模板,例如 templates/Users/index.twig
,如下所示
{{ _view.assign('title', __("I'm title")) }} {{ _view.start('header') }} <p>I'm header</p> {{ _view.end() }} {{ _view.start('footer') }} <p>I'm footer</p> {{ _view.end() }} <p>I'm content</p>
用法
使用 $this
在 twig 中,$this
被替换为 _view
例如,不使用 Twig 编写
<?= $this->fetch('content') ?>
但使用 Twig
{{ _view.fetch('content')|raw }}
助手
任何助手都可以通过它们的驼峰式名称访问,例如
{{ Html.link('Edit user', {'controller':'Users', 'action': 'edit' ~ '/' ~ user.id}, {'class':'myclass'})|raw }}
元素
基本
{% element 'Element' %}
带有变量或选项
{% element 'Plugin.Element' { dataName: 'dataValue' } { optionName: 'optionValue' } %}
单元格
存储在上下文中然后输出它
{% cell cellObject = 'Plugin.Cell' { dataName: 'dataValue' } { optionName: 'optionValue' } %} {{ cellObject|raw }}
获取并直接输出它
{% cell 'Plugin.Cell' { dataName: 'dataValue' } { optionName: 'optionValue' } %}
扩展
如果我想扩展到 Common/demo.twig
<div id="sidebar"> {% block sidebar %}{% endblock %} </div> <div id="content"> {% block body %}{% endblock %} </div>
我们可以在视图中这样写
{% extends 'Common/demo' %} {% block sidebar %} <ul> <li>Item 1</li> <li>Item 2</li> <li>Item 3</li> </ul> {% endblock %} {% block body %} {{ _view.assign('title', __("I'm title")) }} {{ _view.start('header') }} <p>I'm header</p> {{ _view.end() }} {{ _view.start('footer') }} <p>I'm footer</p> {{ _view.end() }} <p>I'm content</p> {% endblock %}
注意:需要 block body
,它相当于 <?= $this->fetch('content') ?>
过滤器
debug
映射到debug
pr
映射到pr
low
映射到strtolower
up
映射到strtoupper
env
映射到env
count
映射到count
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
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
nl2br
映射到nl2br
string
强制转换为string
函数
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::defaultCurrency
number_formatter
映射到Cake\I18n\Number::formatter
uuid
映射到Cake\Utility\Text::uuid
time
将第一个和可选的第二个参数传递到new \Cake\I18n\Time()
timezones
映射到Cake\I18n\Time::listTimezones
elementExists
映射到Cake\View\View::elementExists
,getVars
映射到Cake\View\View::getVars
get
映射到Cake\View\View::get
Twig
访问 Twig 文档 以获取更多信息
额外包含的扩展
事件
此插件发出多个事件。
加载器
默认加载器可以通过监听 WyriHaximus\TwigView\Event\LoaderEvent::EVENT
来替换,例如使用 twital
<?php use Cake\Event\EventListenerInterface; use Goetas\Twital\TwitalLoader; use WyriHaximus\TwigView\Event\ConstructEvent; use WyriHaximus\TwigView\Event\LoaderEvent; class LoaderListener implements EventListenerInterface { public function implementedEvents(): array { return [ LoaderEvent::EVENT => 'loader', ConstructEvent::EVENT => 'construct', ]; } public function loader(LoaderEvent $event): void { $event->result = new TwitalLoader($event->getLoader()); } /** * We've also listening in on this event so we can add the needed extensions to check for to the view */ public function construct(ConstructEvent $event): void { $event->getTwigView()->unshiftExtension('.twital.html'); $event->getTwigView()->unshiftExtension('.twital.xml'); $event->getTwigView()->unshiftExtension('.twital.xhtml'); } }
扩展
可以通过监听 WyriHaximus\TwigView\Event\ConstructEvent::EVENT
将扩展添加到 twig 环境,例如
<?php use Cake\Event\EventListenerInterface; use WyriHaximus\TwigView\Event\ConstructEvent; class LoaderListener implements EventListenerInterface { public function implementedEvents(): array { return [ ConstructEvent::EVENT => 'construct', ]; } public function construct(ConstructEvent $event): void { $event->getTwig()->addExtension(new YourTwigExtension); } }
Bake
您可以使用 Bake 通过使用 theme
选项生成您的基本 CRUD 视图。假设您有一个 TasksController
,您想要生成 twig 模板。您可以使用以下命令生成您的索引、添加、编辑和查看文件,这些文件使用 Twig 格式化
bin/cake bake twig_template Tasks all -t WyriHaximus/TwigView
屏幕截图
分析器
找到的模板
许可证
版权所有 2015 Cees-Jan Kiewiet
在此,任何人获得本软件及其相关文档文件(以下简称“软件”)的副本,免费允许其在不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许向软件提供副本的个人这样做,但受以下条件约束
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何形式的保证,无论是明示的、暗示的,包括但不限于适销性、适用于特定目的和非侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论该责任是基于合同行为、侵权或其他,无论源于、出于或与软件或软件的使用或其他相关事项有关。