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程式碼如截圖
JS程式碼如下,先彈出甜蜜警告詢問是否真要刪除,如果真刪就使用delete方法提交表單。
$('a[data-method=delete]').click(function () {
swal({
title: '確定要刪除嗎?',
icon: 'warning',
dangerMode: true,
buttons: ['取消', '確定'],
})
.then(yes=>{
if(yes)
$(this).children('form').submit();
})
})