ryangjchandler/blade-capture-directive

轻松地在Blade模板中创建内联部分。

v1.0.0 2024-02-26 18:08 UTC

README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

此包引入了一个新的 @capture 指令,允许您捕获Blade模板中的小部分,并在稍后重新使用它们,而无需将它们提取为部分。

安装

您可以通过Composer安装此包

composer require ryangjchandler/blade-capture-directive

用法

此包添加了一对新的指令: @capture@endcapture

@capture 指令将捕获所有Blade,直到遇到一个 @endcapture 指令。它将代码存储在一个变量中,稍后可以使用。

@capture($hello)
    Hello, world!
@endcapture

此指令至少需要1个参数。此参数应是一个PHP变量,您希望将部分分配给该变量。该变量本身将变成一个 Closure,可以在Blade echo标签({{ }})中调用,只要定义后即可。

@capture($hello)
    Hello, world!
@endcapture

{{ $hello() }}

上面的代码将在Laravel编译和浏览器渲染时调用捕获的Blade代码,并输出 Hello, world!

@capture 指令也支持参数。这意味着您可以捕获通用的Blade片段,并动态地更改输出。这是通过指定逗号分隔的PHP变量列表来实现的

@capture($hello, $name)
    Hello, {{ $name }}!
@endcapture

上面的代码将要求传递一个名称给 $hello(),如下所示

@capture($hello, $name)
    Hello, {{ $name }}!
@endcapture

{{ $hello('Ryan') }}

Blade将编译此代码,并且您的视图将输出 Hello, Ryan!。酷吧?

参数列表可以像在函数上定义的任何一组参数一样处理。这意味着您可以分配默认值并指定多个参数

@capture($hello, $name, $greeting = 'Hello, ')
    {{ $greeting }} {{ $name }}!
@endcapture

{{ $hello('Ryan') }}
{{ $hello('Taylor', 'Yo, ') }}

上面的代码现在将输出 Hello, Ryan! 以及 Yo, Taylor!。这真的很酷,我知道!

继承作用域

所有捕获的块都将继承父作用域,就像Blade中的常规部分一样。这意味着您可以使用传递给视图的任何数据,而无需手动将它们传递给块。

@php($name = 'Ryan')

@capture($hello)
    Hello, {{ $name }}!
@endcapture

{{ $hello() }}

如果捕获的块有一个与继承作用域中预定义变量同名参数,则块的参数将始终优先。

测试

composer test

变更日志

请参阅CHANGELOG 了解最近的变化信息。

贡献

请参阅CONTRIBUTING 了解详情。

安全漏洞

请审查我们的安全策略,了解如何报告安全漏洞。

鸣谢

许可证

MIT许可证(MIT)。请参阅许可证文件 了解更多信息。