php blade 安装,[扩展推荐] 让增添 Laravel Blade 语法变得更简单

9a3c4a57a2e3be6224953d976f9084e0.png

我开发了一个 Blade 扩展包 ,允许你轻松地在服务容器中注册 Laravel Blade 语法扩展类。并且自带了了 php artisan make:blade 命令来方便你创建新的 Blade 扩展类(自动注册包 ^_^)。

这个想法并不是很革命性的,但我喜欢的是它组织 Blade 扩展到服务容器类中的方法。

例如,假设您在使用购物车时有一些自定义指令。下面是一个关于如何使用我的 Blade 扩展包的简单示例:

namespace App\Blade;

use BitPress\BladeExtension\Contracts\BladeExtension;

class CartExtension implements BladeExtension

{

public function getDirectives()

{

return [

'cartcount' => [$this, 'getCartCount']

];

}

public function getConditionals()

{

return [

'cartempty' => [$this, 'isCartEmpty']

];

}

public function getCartCount()

{

// 返回购物车计数的逻辑

}

public function isCartEmpty()

{

// 空购物车的逻辑

}

}

上述的扩展将在 Blade 中提供以下指令:

{{-- 条件 --}}

@cartempty

购物车是空的

@else

购物车不为空

@endcartempty

{{-- 指令 --}}

@cartcount

这并没有什么特别的 --- 它仅仅是在 PHP 中可以调用罢了 --- 但是我喜欢这种做法 —— 将这些相关的扩展放到一个文件中,并且可以从注入服务中受益的专用类(例如:一个购物车服务)。

如果我需要为购物车添加额外的指令,我只需要修改 getdirectives() 方法并定义相关的可调用的方法。

你可能会比较感兴趣:这个包的服务提供者是怎样挂载到 Blade 编译器中的?其实很简单:只需要在 boot() 方法中获取所有的有关  blade.extension 的服务标签在编译器中注册为指令即可。

// In the BladeExtensionServiceProvider::boot() method

foreach ($this->app->tagged('blade.extension') as $extension) {

if (! $extension instanceof BladeExtension) {

throw new InvalidBladeExtension($extension);

}

foreach ($extension->getDirectives() as $name => $callable) {

$this->app['blade.compiler']->directive($name, $callable);

}

foreach ($extension->getConditionals() as $name => $callable) {

$this->app['blade.compiler']->if($name, $callable);

}

}

Blade Extensions 包可以很容易地创建并注册 Blade 扩展到服务容易中:

php artisan make:blade Cart

下面就是使用包提供的 BladeRegistrar 方法来注册扩展服务:

use App\Blade\CartExtension;

use BitPress\BladeExtension\Container\BladeRegistrar;

// ...

BladeRegistrar::register(CartExtension::class, function () {

return new CartExtension();

});

如果你喜欢,你也可以使用提供的辅助方法:

blade_extension(CartExtension::class, function () {

return new CartExtension();

});

基本上这就是 BladeRegistrar 为你做的:

$this->app->singleton(CartExtension::class);

$this->app->tag(CartExtension::class, 'blade.extension');

更多

这个包的灵感来源于 Twig extensions 创建和注册 Symfony 项目的方式。

如要开始,请到 GitHub 去查看在 Laravel 中创建 Blade 扩展的完整安装说明和工作流程。

你也可以通过下面命令安装 Blade 扩展包:

composer install bitpress/blade-extensions

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接

我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值