synergitech / twigbridge
为Laravel添加Twig的力量
Requires
- php: ^7.2.5|^8.0
- illuminate/support: ^6|^7|^8|^9
- illuminate/view: ^6|^7|^8|^9
- twig/twig: ^3.0
Requires (Dev)
- laravel/framework: ^6|^7|^8|^9
- mockery/mockery: ^1.3.1
- phpunit/phpunit: ^6.5.14|^7.5.20|^8.5.8|^9.3.7
- squizlabs/php_codesniffer: ^3.6
README
这是一个经过更新的分支,包括各种修复,它将与上游的任何更改保持同步
允许您无缝地在Laravel(>= 6)中使用Twig
如果您需要使用较旧的Laravel版本,请查看原始的rcrowe/TwigBridge
安装
composer require synergitech/twigbridge
Laravel应自动检测服务提供者和外观,但您应使用Artisan添加配置文件
Laravel自动注册服务提供者。使用Artisan发布twig配置文件
php artisan vendor:publish --provider="TwigBridge\ServiceProvider"
Lumen上的安装
对于Lumen,您需要加载相同的服务提供者,但您必须在本地配置中禁用Auth、Translator和Url扩展
将config/twigbridge.php文件复制到您的本地config文件夹,并在bootstrap/app.php中注册配置和服务提供者
$app->configure('twigbridge'); $app->register('TwigBridge\ServiceProvider');
用法
到此为止,您现在可以像使用其他任何视图一样开始使用twig了
//app/Http/routes.php //twig template resources/views/hello.twig Route::get('/', function () { return View::make('hello'); });
您可以在resources/views中创建带有.twig文件扩展名的twig文件。
您调用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模板中使用扩展/添加新函数。将配置/twigbridge.php中的enabled数组添加到要加载的扩展列表中。
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.x'样式外观,启用Legacy Facades扩展
- TwigBridge\Extension\Laravel\Legacy\Facades
FilterLoader和FunctionLoader
这些加载扩展公开了Laravel助手作为Twig函数和过滤器。
查看config/twigbridge.php文件以查看定义的函数/过滤器列表。您也可以添加自己的。
FacadeLoader
FacadeLoader扩展允许您调用在config/twigbridge.php中配置的任何外观。这为您提供了与任何Laravel类以及任何其他别名类的集成。
要使用Laravel集成(或任何别名类和方法),只需将外观添加到配置并调用它们即可,例如URL.to(link)(而不是URL::to($link))。
函数/过滤器/变量
以下辅助器/过滤器由默认扩展添加。它们基于辅助器或外观,因此应该是自我解释的。
函数
- asset, action, url, route, secure_url, secure_asset
- auth_check, auth_guest, auth_user
- can
- config_get, config_has
- dump
- form_*(所有 Form::* 方法,蛇形命名)
- html_*(所有 Html::* 方法,蛇形命名)
- input_get, input_old, input_has
- link_to, link_to_asset, link_to_route, link_to_action
- session_has, session_get, csrf_token, csrf_field, method_field
- str_*(所有 Str::* 方法,蛇形命名)
- trans, trans_choice
- url_*(所有 URL::* 方法,蛇形命名)
过滤器
- camel_case, snake_case, studly_case
- str_*(所有 Str::* 方法,蛇形命名)
- trans, trans_choice
全局变量
- app: Illuminate\Foundation\Application 对象
- errors: 验证器的 $errors MessageBag(始终可用)
Artisan 命令
TwigBridge 提供了用于 CLI 交互的命令。
清空 Twig 缓存
php artisan twig:clean
检查所有 Twig 模板
php artisan twig:lint