nickyx3/blitz

Laravel Blitz 视图(由 Alexey Rybak 开发的 Blitz 扩展模板引擎,https://github.com/alexeyrybak/blitz)

1.1.0 2022-09-06 12:01 UTC

This package is auto-updated.

Last update: 2024-09-06 16:33:24 UTC


README

Blitz 模板 PHP 扩展的 Facade。

要求

默认缓存类型是 "file",准备好的模板存储在 laravel "storage/blitz_compiled" 文件夹中(可能在配置中更改)。默认情况下,缓存是禁用的,您可以在 "config/blitz.php" 中将 "cache_enabled" 更改为 "true"。

Laravel 安装

使用 Composer 需求此包

$ composer require nickyx3/blitz

然后运行

$ php artisan vendor:publish --provider="NickyX3\Blitz\Providers\BlitzServiceProvider"

配置

默认配置

    'templates_folder'      => 'blitz_view',
    'cache_type'            => 'file',
    'cache_enabled'         => false,
    'compiled_folder'       => 'blitz_compiled',
    'scope_lookup_limit'    => 8,
    'php_callbacks_first'   => 1,
    'namespace_finder'      => [
        'App\Helpers',
        'Illuminate\Support',
        'Illuminate\Support\Facades'
    ]

配置参数

  • templates_folder - 源模板相对于 laravel 资源文件夹的位置
  • cache_type - 'file' 或 'redis',默认 'file'
  • cache_enabled - 启用或禁用缓存,默认 'false'
  • compiled_folder - 缓存存储相对于 laravel 存储文件夹的位置,如果缓存类型为 'redis',则 redis 键是文件系统中编译文件的完整路径,例如 'file' 缓存类型
  • scope_lookup_limit - Blitz 扩展 ini 参数
  • php_callbacks_first - Blitz 扩展 ini 参数
  • namespace_finder - 模板处理器将在哪个命名空间中查找模板中指定的回调类。例如,您在模板中写了 Lang::get('DefaultTitle')。处理器将在这这些命名空间中查找第一个匹配的类,并将其扩展为具有命名空间的完全限定类名(Illuminate\Support\Facades\Lang::get('DefaultTitle'))。如果找不到类,则删除回调。

使用方法

示例控制器

use NickyX3\Blitz\Facade\BlitzView;

Route::get('/', function () {
    return BlitzView::apply('example.blitz-extend',['title'=>'Blitz Title']);
});

方法 apply 返回 Illuminate\Http\Response,方法 makeapply 的别名

命令

此命令还可用以清除模板缓存

$ php artisan blitz:clear

异常

如果 Blitz 生成错误,则抛出自定义的 BlitzException 并使用集成渲染器。如果您的 env APP_DEBUG=true,则将渲染此异常,否则使用 abort 辅助程序显示简单的 Laravel 错误 500。

模板语法功能

与只能做包含的 Blitz 不同,模板 "up" 继承的工作方式类似于 Blade 引擎。以下 Blade 指令被支持:@yield@extends@section@endsection 放在 HTML 注释标签中。还添加了对 Blade @csrf 辅助程序的支持,在 HTML 注释标签中如 <!-- @csrf --> 或直接 @csrf

示例

  • "example/master.tpl" 模板
<!DOCTYPE html>
<html lang="en">
<body>
<!-- @yield('content') -->
</body>
</html>
  • "blitz-extend.tpl" 模板
<!-- @extends('example.master') -->
<!-- @section('content') -->
<div class="child-template">this is template extends example/master.tpl</div>
<!-- @endsection -->

回调是如何工作的?

  • 一些 Blitz 指令,如带有回调的行内条件,将转换为完整版本,因为回调在条件中不起作用
{{ if($title,$title,Lang::get('DefaultTitle')) }}

转换为

{{ IF $title }}{{ $title }}{{ ELSE }}{{ Illuminate\Support\Facades\Lang::get('DefaultTitle') }}{{ END if-title }}
  • 带有回调的完整 Blitz IF 条件,如下所示
{{ IF App::currentLocale()=='en' }}
    currentLocale: {{ App::currentLocale() }}
{{ ELSE }}
    currentLocale not 'en'
{{ END }}

将在缓存模板中转换为以下代码

{{ IF Illuminate\Support\Facades\App::currentLocale()=='en' }}
    currentLocale: {{ Illuminate\Support\Facades\App::currentLocale() }}
{{ ELSE }}
    currentLocale not 'en'
{{ END }}

但获取 "compiled" 模板后,所有这样的回调将实时转换为变量

{{ IF $callback_83e69f8a22cc276d050d93f63c89a290=='en' }}
    currentLocale: {{ $callback_83e69f8a22cc276d050d93f63c89a290 }}
{{ ELSE }}
    currentLocale not 'en'
{{ END }}

变量 $callback_83e69f8a22cc276d050d93f63c89a290 将被设置为 eval Illuminate\Support\Facades\App::currentLocale(); 的结果。如果模板中有与条件匹配的回调函数,它们也将被替换为这个变量,以避免多次调用回调函数。

祝您玩得开心!

代码可能不是很优秀,我刚开始接触 Laravel,而且文档也很不完整,因为我要去度假了。也许我以后会详细注释一下 :-)

欢迎提出补充和更正。