Laravel框架中自訂範本指令相關總結

jacklove
發布: 2023-04-02 15:54:02
原創
1559 人瀏覽過

Blade 允許你自訂指令,你可以使用 directive 方法註冊指令。以下這篇文章主要給大家總結介紹了Laravel框架中自訂模板指令的相關資料,文中透過範例程式碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧

介紹

最近在學習laravel,在Laravel框架中使用模板的一種方法就是透過控制器佈局,通常我們在視圖模板中編寫複雜的邏輯,看起來看起來很雜亂,那麼使用自訂的模板Directives,可以簡化你的視圖邏輯,編寫出更優雅的程式碼​​,Lar​​avel Blade是一種將其特殊語法編譯成PHP和HTML的模板引擎。其特殊語法指令,指令是加糖功能,在其後隱藏雜亂的程式碼。模板包含大量的內建指令,例如@foreach/@if/@section/@extends等等,內建的指令對於做一個簡單的專案足以,但是當你在程式碼中編寫重複複雜的功能時,那麼自訂模板指令或許可以幫你優化你的視圖結構。

下面話不多說了,來一起看看詳細的介紹吧。

自訂一個簡單的範本指令

#$expression參數是可選的

#
\Blade::directive('directive_name', function ($expression) {
 return $expression;
});
登入後複製

檢視中用法Demo

#
<p>@hello(&#39;World&#39;)</p>
登入後複製

宣告自訂範本指令的位置AppServiceProvider.php

<?php
namespace App\Providers;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
 /**
  * Perform post-registration booting of services.
  *
  * @return void
  */
 public function boot()
 {
  Blade::directive(&#39;hello&#39;, function ($expression) {
   return "<?php echo &#39;Hello &#39; . {$expression}; ?>";
  });
 }
 /**
  * Register bindings in the container.
  *
  * @return void
  */
 public function register()
 {
  //
 }
}
登入後複製

以這種方式定義的指令載入成功,可以在任何範本中使用

注意事項

第一點

不能直接存取自訂指令中傳遞的多個參數,需要將其遍歷出來

<p>@greet(&#39;Hi&#39;, &#39;Hammad&#39;)</p>
\Blade::directive(&#39;hello&#39;, function ($expression) {
 list($greet, $name) = explode(&#39;, &#39;, $expression);

 return "<?php echo {$greet} . &#39; &#39; . {$name}; ?>";
});
登入後複製

像array() list() 這種並不是函數,而是一種語言結構

第二點

一定要隨時記住需要過濾輸出,一般使用{{}}時候,Blade已經預先執行了過濾操作,為了避免惡意用戶將js程式碼注入到站點,一定要轉義HTML,可以使用Laravel自帶的函數e(),也相當於htmlentities()

#
\Blade::directive(&#39;hello&#39;, function ($expression) {
 return "<?php echo &#39;Hello &#39; . e({$expression}); ?>";
});
登入後複製

第三點

每次新增或修改自訂模板指令之後,一定要先清除快取視圖模板,可以使用clear Artisan

php artisan view:clear
登入後複製

Laravel5.5新特性

在使用自訂的範本指令的時候,大多數只是某種形式的條件,這些要求我們需要註冊三個獨立指令,if/else/endif,目前Laravel5.5已經支援簡化條件指令,例如下面的實例,模板可以使用admin/else/endadmin

public function boot()
{
 \Blade::if(&#39;admin&#39;, function () {
  return auth()->check() && auth()->user()->isAdmin();
 });
}
登入後複製

總結

您可能感興趣的文章:

PHP遞歸實現快速排序的方法範例講解

PHP實作git部署的方法教學詳解

PHP實作的二分查找演算法實例分析講解

以上是Laravel框架中自訂範本指令相關總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板