diyphpdeveloper/twigbridge

为 Laravel 添加 Twig 的强大功能

v1.0.1 2016-06-08 01:35 UTC

README

允许您在 Laravel 5 中无缝使用 Twig

Latest Stable Version Total Downloads License

需求

TwigBridge >=0.7 需要 Laravel 5。

如果您需要支持 Laravel 4.1/4.2,请查看 TwigBridge 0.6.x,或者 Laravel 4.0 的 0.5.x。

安装

使用 Composer 需要此包

composer require rcrowe/twigbridge

快速入门

一旦 Composer 安装或更新了您的包,您需要将 TwigBridge 注册到 Laravel 本身。打开 config/app.php 并找到 providers 键,文件末尾,并添加 'TwigBridge\ServiceProvider' 到末尾

'providers' => [
     ...
                'TwigBridge\ServiceProvider',
],

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

'aliases' => [
    ... 
                'Twig' => 'TwigBridge\Facade\Twig',
],

现在我们已经将这两行添加到 config/app.php,我们将使用 Artisan 添加新的 twig 配置文件

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

到此为止,您现在可以开始像使用任何其他视图一样使用 twig

//app/Http/routes.php
//twig template resources/views/hello.twig
Route::get('/', function () {
    return View::make('hello');
});

您可以在 resources/views 中创建具有 .twig 扩展名的 twig 文件。

resources/views/hello.twig

配置

一旦 Composer 安装或更新了您的包,您需要将 TwigBridge 注册到 Laravel 本身。打开 config/app.php 并找到 providers 键到底部并添加

'TwigBridge\ServiceProvider',

您可以将 TwigBridge Facade 添加,以便更容易访问 TwigBridge(或 Twig_Environment)。

'Twig' => 'TwigBridge\Facade\Twig',
Twig::addExtension('TwigBridge\Extension\Loader\Functions');
Twig::render('mytemplate', $data);

TwigBridge 的配置文件可以在 ConfigServiceProvider 下的 twigbridge 键处扩展。默认配置文件位于 vendor/rcrowe/twigbridge/config

您应该使用 Artisan 将默认配置文件从 /vendor 目录复制到 /config/twigbridge.php,以下命令

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

如果您更改了 /config/twigbridge.php 文件,您可能需要运行 twig:clean Artisan 命令以使更改生效。

Lumen 上的安装

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

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

用法

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

// Without the file extension
View::make('i_am_twig', [...])

TwigBridge 还支持其他包中的视图

View::make('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 模板中使用新的函数。将扩展名添加到 config/extensions.php 中的 enabled 数组中,以便 Twig 加载。

'enabled' => array(
    '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_Debug
  • TwigBridge\Extension\Laravel\Auth
  • TwigBridge\Extension\Laravel\Config
  • TwigBridge\Extension\Laravel\Dump
  • TwigBridge\Extension\Laravel\Form
  • 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.x' 风格的 Facades,请启用 Legacy Facades 扩展

  • TwigBridge\Extension\Laravel\Legacy\Facades

过滤器加载器和函数加载器

这些加载器扩展将Laravel辅助函数同时作为Twig函数和过滤器提供。

查看config/extensions.php文件以查看定义的函数/过滤器的列表。您也可以添加自己的。

FacadeLoader

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

要使用Laravel集成(或任何别名类和方法),只需将您的外观添加到配置中,并像这样调用它们:URL.to(link)(而不是URL::to($link)

函数/过滤器/变量

以下辅助函数/过滤器是由默认扩展添加的。它们基于辅助函数和/或外观,因此应该很容易理解。

函数

  • asset, action, url, route, secure_url, secure_asset
  • auth_check, auth_guest, auth_user
  • config_get, config_has
  • dump
  • form_*(所有Form::*方法,使用蛇形命名法)
  • html_*(所有Html::*方法,使用蛇形命名法)
  • input_get, input_old
  • link_to, link_to_asset, link_to_route, link_to_action
  • session_has, session_get, csrf_token
  • str_*(所有Str::*方法,使用蛇形命名法)
  • trans, trans_choice
  • url_*(所有URL::*方法,使用蛇形命名法)

过滤器

  • camel_case, snake_case, studly_case
  • str_*(所有Str::*方法,使用蛇形命名法)
  • trans, trans_choice

全局变量

  • app: Illuminate\Foundation\Application对象
  • errors: 来自验证器的$messages MessageBag(始终可用)

Artisan命令

TwigBridge提供了一个用于CLI交互的命令。

清空Twig缓存

$ php artisan twig:clean

检查所有Twig模板

$ php artisan twig:lint