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映射到debugpr映射到prlow映射到strtolowerup映射到strtoupperenv映射到envcount映射到countpluralize映射到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::toPercentagenumber_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_decodenl2br映射到nl2brstring强制转换为string
函数
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::defaultCurrencynumber_formatter映射到Cake\I18n\Number::formatteruuid映射到Cake\Utility\Text::uuidtime将第一个和可选的第二个参数传递到new \Cake\I18n\Time()timezones映射到Cake\I18n\Time::listTimezoneselementExists映射到Cake\View\View::elementExists,getVars映射到Cake\View\View::getVarsget映射到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
在此,任何人获得本软件及其相关文档文件(以下简称“软件”)的副本,免费允许其在不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许向软件提供副本的个人这样做,但受以下条件约束
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何形式的保证,无论是明示的、暗示的,包括但不限于适销性、适用于特定目的和非侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论该责任是基于合同行为、侵权或其他,无论源于、出于或与软件或软件的使用或其他相关事项有关。

