surgiie / blade
laravel blade 引擎的扩展版本,以便可以在任何文本中使用。
Requires
- php: ^8.1|^8.2
- illuminate/view: ^10.0
Requires (Dev)
- laravel/pint: ^1.7
- mockery/mockery: ^1.4.4
- pestphp/pest: ^1.21.3
- symfony/var-dumper: ^6.0
This package is auto-updated.
Last update: 2024-03-14 06:07:57 UTC
README
废弃
此软件包不再维护,请考虑使用 laravel-blade-cli 来满足模板需求。
Laravel Blade 引擎的独立扩展版本,以便可以在任何文本文件上实时使用。
为什么?
市面上有多个独立的 blade 软件包,但它们都是为了 html 模板文件设计的,其中间距不是很重要。我想能够在部署 ci 管道中渲染模板文件,如 yaml,并且希望它在任何文本文件上基本都能工作。Blade 引擎会裁剪输出,并且一些编译指令不会保留渲染内容的嵌套,例如,如果你有一个这样的文件
# example.yaml name: {{ $name }} test: @include("partial.yaml")
@include
内容的每一行都应该与 @include
指令左侧的空格数缩进相同,但实际上并不是这样,渲染的结果在嵌套/间距方面不会匹配原始文件结构。这对于渲染像 yaml 这样的文件来说是个问题,因为在 yaml 中,间距和缩进具有语义意义。
安装
composer require surgiie/blade
使用
<?php use Surgiie\Blade\Blade; use Illuminate\Container\Container; use Surgiie\Blade\Component; // set a cache directory for compiled cache files, defaults to vendor/surgiie/blade/.cache Blade::setCachePath("/tmp/.blade"); $blade = new Blade( // pass optional container, defaults to: Container::getInstance() or new instance. container: new Container, ); // then render any textual file by path and vars: $contents = $blade->render("/path/to/file", ['var'=>'example']);
删除缓存文件
您可以使用 deleteCacheDirectory
方法删除缓存文件
Blade::deleteCacheDirectory();
提示 - 在调用 render
方法之前这样做可以强制渲染文件。
自定义指令
您可以使用 directive
方法创建自定义 blade 指令
$blade = new Blade(); $blade->directive('echo', fn ($expression) => "<?php echo {$expression}; ?>"); $contents = $blade->render("/example.txt", ['name' => 'Surgiie', 'dogs'=>['luffy', 'zoro', 'sanji']]);
使用组件
您还可以在文件中使用 Blade x-*
组件
匿名组件
使用点表示法组件标签名,您可以为要渲染的组件文件指定
<x-component.yaml data="Something" />
其中 component.yaml
解析为 components/yaml
文件或相对于要渲染的文件的 component.yaml
文件,该文件可以包含任何原始内容,并将被视为匿名组件。
绝对路径:如果您想使用绝对路径渲染组件文件,请在标签名中的 x
后使用双短横线而不是单短横线,即 x--
而不是 x-
<x--components.foo.yaml data="Something" />
上述组件将解析为 /components/foo/yaml
,如果它不存在,则解析为 /components/foo.yaml
或出错,如果两者都不存在。
类组件
要指定用于组件名的组件类,您可以使用 components
方法注册组件
Blade::components([ 'components.example' => App\Components\Alert::class, ]);
然后您可以在文件中使用该组件
<x-components.example data="example" />
然后引擎将使用该类来渲染组件。
如果您在使用此软件包时,一个类可能在运行时不可用或希望 require
类,您可以使用一个返回类常量的 php 文件
use Surgiie\Blade\Component; class Alert extends Component; { /** ....*/ } return Alert::class;
然后如果组件名以 .php 结尾,引擎将尝试在运行时 require
它
<x-alert.php />