您好,登錄后才能下訂單哦!
Laravel框架中怎么自定義模板指令,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
自定義一個簡單的模板指令
$expression參數是可選的
\Blade::directive('directive_name', function ($expression) { return $expression; });
視圖中用法Demo
<p>@hello('World')</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('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(); }); }
看完上述內容,你們掌握Laravel框架中怎么自定義模板指令的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。