Laravel Blade 模板:自定义 Blade 指令 2 个改进

自定义指令介绍

当你在 Blade 里编写了重复的代码逻辑时,你可以使用自定义指令来封装。

在 Blade 使用自定义指令时,有点类似管道:把信息进一步处理后再输出。

如何创建自定义指令

Blade 允许你使用 directive 方法自定义指令。当 Blade 编译器遇到自定义指令时,这会调用该指令包含的表达式提供的回调。

下面的例子创建了 @datetime($var) 指令,一个格式化给定的 DateTime 的实例 $var

<?php

namespace App\Providers;

use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * 执行注册后引导服务.
     *
     * @return void
     */
    public function boot()
    {
        Blade::directive('datetime', function ($expression) {
            return "<?php echo ($expression)->format('m/d/Y H:i'); ?>";
        });
    }

    /**
     * 在容器中注册绑定.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

如你所见,我们将在传递给该指令的任意表达式中链式调用 format 方法。在这个例子中,该指令将生成如下原生 PHP 代码:

<?php echo ($var)->format('m/d/Y H:i'); ?>

在更新 Blade 指令的逻辑之后,需要删除Blade 视图的所有缓存。可以使用 view:clear Artisan 命令删除 Blade 视图缓存。

本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 1

你也可以使用 Helpers 来建立一个全局函数,此函数你可以在任何地方使用。 Example: app/Helpers/Utility.php

/**
 * Generate the time format string
 **/
if (!function_exists('dateTimeFormat')) {
    function dateTimeFormat($t = 'today', $f = 'Y-m-d H:i:s') {
        return ($t == 'today') ? \Carbon\Carbon::now()->format($f) : \Carbon\Carbon::parse($t)->format($f);
    }
}

Example: resources/views/test.blade.php

Today is {{ dateTimeFormat('today', 'Y-m-d H:i:s') }}.
2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!