wyrihaximus/twig-view

CakePHP 的 Twig 视图组件

安装次数: 4,078,685

依赖项: 4

建议者: 0

安全性: 0

星标: 81

关注者: 28

分支: 29

开放问题: 1

类型:cakephp-plugin

5.0.1 2019-12-30 11:29 UTC

README

Build Status Latest Stable Version Total Downloads Code Coverage Software License

此插件允许您在视图中使用 Twig 模板语言

除了启用使用 Twig 的大部分功能外,该插件与 CakePHP 视图渲染器紧密集成,使您能够完全访问助手、对象和元素。

已弃用:请使用 cakephp/twig-view 代替。

安装

要通过 Composer 安装,请使用以下命令。

composer require wyrihaximus/twig-view

配置

加载插件

运行以下 CLI 命令

bin/cake plugin load WyriHaximus/TwigView

使用 View 类

而不是从 View 扩展,让 AppViewTwigView 扩展

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') ?>

过滤器

函数

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

屏幕截图

分析器

Profiler

找到的模板

Templates found

许可证

版权所有 2015 Cees-Jan Kiewiet

在此,任何人获得本软件及其相关文档文件(以下简称“软件”)的副本,免费允许其在不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许向软件提供副本的个人这样做,但受以下条件约束

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

本软件按“原样”提供,不提供任何形式的保证,无论是明示的、暗示的,包括但不限于适销性、适用于特定目的和非侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论该责任是基于合同行为、侵权或其他,无论源于、出于或与软件或软件的使用或其他相关事项有关。