Laravel框架中自定义模板指令总结


Posted in PHP onDecember 17, 2017

介绍

最近在学习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

<?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();
 });
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
适用于php-5.2 的 php.ini 中文版[金步国翻译]
Apr 17 PHP
PHP中创建空文件的代码[file_put_contents vs touch]
Jan 20 PHP
PHP file_get_contents设置超时处理方法
Sep 30 PHP
PHP is_subclass_of函数的一个BUG和解决方法
Jun 01 PHP
php学习笔记之基础知识
Nov 08 PHP
php使用function_exists判断函数可用的方法
Nov 19 PHP
PHP从FLV文件获取视频预览图的方法
Mar 12 PHP
php计算一个文件大小的方法
Mar 30 PHP
PHP 中提示undefined index如何解决(多种方法)
Mar 16 PHP
php微信开发之自定义菜单实现
Nov 18 PHP
PHP实现的微信公众号扫码模拟登录功能示例
May 30 PHP
php获取是星期几的的一些常用姿势
Dec 15 PHP
PHP结合Vue实现滚动底部加载效果
Dec 17 #PHP
PHP7下协程的实现方法详解
Dec 17 #PHP
浅谈PHP实现大流量下抢购方案
Dec 15 #PHP
PHP实现数组的笛卡尔积运算示例
Dec 15 #PHP
PHP中OpenSSL加密问题整理
Dec 14 #PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
Dec 14 #PHP
THINKPHP3.2使用soap连接webservice的解决方法
Dec 13 #PHP
You might like
php !function_exists(&quot;T7FC56270E7A70FA81A5935B72EACBE29&quot;))代码解密
2011/01/07 PHP
关于PHP虚拟主机概念及如何选择稳定的PHP虚拟主机
2018/11/20 PHP
动态改变textbox的宽高的js
2006/10/26 Javascript
用jquery实现学校的校历(asp.net+jquery ui 1.72)
2010/01/01 Javascript
js限制checkbox选中个数以限制六个为例
2014/07/15 Javascript
深入剖析JavaScript中的函数currying柯里化
2016/04/29 Javascript
微信小程序 label 组件详解及简单实例
2017/01/10 Javascript
基于jQuery实现瀑布流页面
2017/04/11 jQuery
基于Node的React图片上传组件实现实例代码
2017/05/10 Javascript
Js实现京东无延迟菜单效果实例(demo)
2017/06/02 Javascript
js实现随机点名系统(实例讲解)
2017/10/18 Javascript
Vue.js通用应用框架-Nuxt.js的上手教程
2017/12/25 Javascript
Vue.js实现的购物车功能详解
2019/01/27 Javascript
layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法
2019/09/24 Javascript
JS数组Reduce方法功能与用法实例详解
2020/04/29 Javascript
[01:34]完美“圣”典宣传片震撼发布,12.17与你不见不散
2016/12/16 DOTA
python将html转成PDF的实现代码(包含中文)
2013/03/04 Python
python 数据的清理行为实例详解
2017/07/12 Python
http请求 request失败自动重新尝试代码示例
2018/01/25 Python
Python Selenium Cookie 绕过验证码实现登录示例代码
2018/04/10 Python
让代码变得更易维护的7个Python库
2018/10/09 Python
python获取本机所有IP地址的方法
2018/12/26 Python
python Tkinter的图片刷新实例
2019/06/14 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
2020/06/27 Python
详解Django中异步任务之django-celery
2020/11/05 Python
CSS3用@font-face实现自定义英文字体
2013/09/23 HTML / CSS
html5 canvas实现圆形时钟代码分享
2013/12/25 HTML / CSS
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
澳大利亚购买最佳炊具品牌网站:Cookware Brands
2019/02/16 全球购物
英国马匹装备和马术用品购物网站:Equine Superstore
2019/03/03 全球购物
学校地质灾害防治方案
2014/06/10 职场文书
2014年中秋寄语
2014/08/11 职场文书
慈善献爱心倡议书
2015/04/27 职场文书
小学生禁毒教育心得体会
2016/01/15 职场文书
晶体管单管来复再生式收音机
2021/04/22 无线电
使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)
2021/06/09 Vue.js