surgiie/blade

此软件包已被废弃,不再维护。未建议替代软件包。

laravel blade 引擎的扩展版本,以便可以在任何文本中使用。

v3.0.2 2023-11-17 02:27 UTC

README

废弃

此软件包不再维护,请考虑使用 laravel-blade-cli 来满足模板需求。

tests

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 />