Blade 模版擴充套件應用一例:為低版 Laravel 新增 csrf 及 method 指令

zhaiduting發表於2019-12-19

5.8版本里面有兩個很好用的指令,他們是@csrf以及@method(...)。對於老版本怎麼辦?如果也想用這兩個指令的話,那就需要擴充套件Blade模版了。方法很簡單,只需要在app\Providers\AppServiceProvider.php檔案的boot()方法裡面加幾行程式碼就可以了。

    public function boot()
    {
        Blade::directive('csrf', function (){
            return '<?php echo csrf_field(); ?>';
        });
        Blade::directive('method', function ($method){
            // 指令不帶引數則預設是 delete 方法
            $method= $method ?: "'delete'";
            return "<?php echo method_field($method); ?>";
        });
        ...
    }

如此一來就可以在模版裡面使用這兩個指令了(先要敲入命令php artisan view:clear清掉快取),比如下面的刪除按鈕

<a href="javascript:" data-method="delete">
    <i class="fa fa-trash-o"></i> 刪除
    <form action="http..." method="post" class="d-none">
        @csrf @method
    </form>
</a>

最終生成的html程式碼如截圖
Blade模版擴充套件應用一例:為低版laravel新增csrf及method指令

JS程式碼如下,先彈出甜蜜警告詢問是否真要刪除,如果真刪就使用delete方法提交表單。

$('a[data-method=delete]').click(function () {
    swal({
        title: '確定要刪除嗎?',
        icon: 'warning',
        dangerMode: true,
        buttons: ['取消', '確定'],
    })
        .then(yes=>{
            if(yes)
                $(this).children('form').submit();
        })
})

相關文章