opm87/twigbridge

为 Laravel 添加 Twig 的功能

v1.1.3 2020-10-07 13:27 UTC

README

无缝地在 Laravel 5 中实现 Twig

Latest Stable Version Total Downloads License

要求

安装

使用 Composer 安装此包

$ composer require rcrowe/twigbridge

快速入门

Laravel

Composer 安装或更新你的包后,你需要将 TwigBridge 注册到 Laravel。打开 config/app.php,找到文件末尾的 providers 键,添加 TwigBridge\ServiceProvider::class 到末尾

'providers' => [
     // ...

     TwigBridge\ServiceProvider::class,
],

现在找到 aliases 键,再次在文件末尾,添加 'Twig' => TwigBridge\Facade\Twig::class 以便更容易地访问 TwigBridge(或 Twig_Environment)类

'aliases' => [
    // ...

    'Twig' => TwigBridge\Facade\Twig::class,
],

现在,您已经将这两行添加到 config/app.php 中,我们将使用 Artisan 发布此包的配置文件

$ php artisan vendor:publish --provider="TwigBridge\ServiceProvider"

您现在可以像使用任何其他视图一样开始使用 Twig

// resources/views/hello.twig
<h1>{{ 'Hello, world' }}<h1>
// app/Http/routes.php
Route::get('/', function () {
    return view('hello');
});

Lumen

对于 Lumen,你需要加载相同的 Service Provider,但必须在本地配置中禁用 AuthTranslatorUrl 扩展。将 config/twigbridge.php 文件复制到您的本地 config 文件夹,并在 bootstrap/app.php 中注册配置和服务提供者

$app->configure('twigbridge');
$app->register('TwigBridge\ServiceProvider');

配置

要告诉此包从多个位置加载您的 Twig 文件,更新 config/view.php 中的 paths 数组。

您的 Twig 文件可以有 config/twigbridge.phptwig.file_extensions 键配置的任何文件扩展名。默认支持 .html.twig.twig

用法

您可以通过像调用其他视图一样调用 Twig 模板

view('i_am_twig', [...]);

TwigBridge 还支持其他包中的视图

view('pagination::simple');

在扩展另一个 Twig 模板时,上述规则仍然适用

{% extends "parent" %}
{% extends "pagination::parent" %}

您可以用参数调用函数

{{ link_to_route('tasks.edit', 'Edit', task.id, {'class': 'btn btn-primary'}) }}

默认情况下,所有输出变量都会被转义。使用 raw 过滤器来跳过转义。

{{ some_var }}
{{ html_var | raw }}
{{ long_var | str_limit(50) }}

扩展

有时您想扩展或添加新函数以在 Twig 模板中使用。为此,将 Twig 要加载的扩展列表添加到 config/twigbridge.php 中的 enabled 数组

'enabled' => [
    'TwigBridge\Extensions\Example',
]

TwigBridge 支持字符串或闭包作为回调,因此例如,您可能可以这样实现 Assetic Twig 扩展

'enabled' => [
    function ($app) {
        $factory = new Assetic\Factory\AssetFactory($app['path'].'/../some/path/');
        $factory->setDebug(false);

        // etc...

        return new Assetic\Extension\Twig\AsseticExtension($factory);
    }
]

TwigBridge 默认启用了以下扩展

  • Twig\Extension\DebugExtension
  • TwigBridge\Extension\Laravel\Auth
  • TwigBridge\Extension\Laravel\Config
  • TwigBridge\Extension\Laravel\Dump
  • TwigBridge\Extension\Laravel\Form
  • TwigBridge\Extension\Laravel\Gate
  • TwigBridge\Extension\Laravel\Html
  • TwigBridge\Extension\Laravel\Input
  • TwigBridge\Extension\Laravel\Session
  • TwigBridge\Extension\Laravel\String
  • TwigBridge\Extension\Laravel\Translator
  • TwigBridge\Extension\Laravel\Url
  • TwigBridge\Extension\Loader\Facades
  • TwigBridge\Extension\Loader\Filters
  • TwigBridge\Extension\Loader\Functions

要启用 0.5.* 风格的 Facades,请启用 Legacy Facades 扩展

  • TwigBridge\Extension\Laravel\Legacy\Facades

FilterLoader 和 FunctionLoader

这些加载扩展将 Laravel 辅助函数公开为 Twig 函数和过滤器。查看 config/twigbridge.php 文件以查看定义的函数和过滤器的列表。您也可以添加自己的。

FacadeLoader

FacadeLoader 扩展允许您调用在 config/twigbridge.php 中配置的任何 facade。这使您的 Twig 模板可以与任何 Laravel 类以及任何其他别名类集成。

要使用 Laravel 集成(或者任何别名类和方法),请将您的门面添加到配置文件中,并像这样调用它们:URL.to(link)(而不是URL::to($link))。

函数/过滤器/变量

以下助手/过滤器是由默认扩展添加的。它们基于 Laravel 的标准助手函数。

函数

  • assetactionurlroutesecure_urlsecure_asset
  • auth_checkauth_guestauth_user
  • can
  • config_getconfig_has
  • dump
  • form_*(所有 Form::* 方法,下划线命名法)
  • html_*(所有 Html::* 方法,下划线命名法)
  • input_getinput_oldinput_has
  • link_tolink_to_assetlink_to_routelink_to_action
  • session_hassession_getcsrf_tokencsrf_fieldmethod_field
  • str_*(所有 Str::* 方法,下划线命名法)
  • transtrans_choice
  • url_*(所有 URL::* 方法,下划线命名法)

过滤器

  • camel_casesnake_casestudly_case
  • str_*(所有 Str::* 方法,下划线命名法)
  • transtrans_choice

全局变量

  • appIlluminate\Foundation\Application 对象
  • errors:来自验证器的 $errors MessageBag

Artisan 命令

TwigBridge 还提供了两个 Artisan 命令以帮助开发

# Empty the Twig cache:
$ php artisan twig:clean

# Lint all Twig templates:
$ php artisan twig:lint