Laravel架構中自訂模板指令相關總結

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

介紹

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

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

自訂一個簡單的模板指令

$expression參數是可選的

\Blade::directive('directive_name', function ($expression) { return $expression;});

視圖中用法Demo

<p>@hello('World')</p>

聲明自訂模板指令的位置AppServiceProvider.php

<?phpnamespace 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('hello', function ($expression) {   return "<?php echo 'Hello ' . {$expression}; ?>";  }); } /**  * Register bindings in the container.  *  * @return void  */ public function register() {  // }}

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

注意事項

第一點

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

<p>@greet('Hi', 'Hammad')</p>\Blade::directive('hello', function ($expression) { list($greet, $name) = explode(', ', $expression); return "<?php echo {$greet} . ' ' . {$name}; ?>";});

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

第二點

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

\Blade::directive('hello', function ($expression) { return "<?php echo 'Hello ' . e({$expression}); ?>";});

第三點

每次添加或修改自訂模板指令之後,一定要先清除緩衝視圖模板,可以使用clear Artisan

php artisan view:clear

Laravel5.5新特性

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

public function boot(){ \Blade::if('admin', function () {  return auth()->check() && auth()->user()->isAdmin(); });}

總結

您可能感興趣的文章:

PHP遞迴實現快速排序的方法樣本講解

PHP實現git部署的方法教程詳解

PHP實現的二分尋找演算法執行個體分析講解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.