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 相关文章推荐
ThinkPHP中实例Model方法的区别说明
Aug 21 PHP
php除数取整示例
Apr 24 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
Jun 19 PHP
PHP记录搜索引擎蜘蛛访问网站足迹的方法
Apr 15 PHP
PHP实现事件机制实例分析
Jun 26 PHP
PHP判断是否连接上网络的方法
Jul 01 PHP
php实现短信发送代码
Jul 05 PHP
修改PHP脚本使WordPress拦截垃圾评论的方法示例
Dec 10 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
Apr 18 PHP
微信封装的调用微信签名包的类库
Jun 08 PHP
PHP性能分析工具xhprof的安装使用与注意事项
Dec 19 PHP
用PHP做了一个领取优惠券活动的示例代码
Jul 05 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初学者头痛的十四个问题
2006/07/12 PHP
使用PHP计算两个路径的相对路径
2013/06/14 PHP
php日历制作代码分享
2014/01/20 PHP
php查询内存信息操作示例
2019/05/09 PHP
JavaScript 入门·JavaScript 具有全范围的运算符
2007/10/01 Javascript
非阻塞动态加载javascript广告实现代码
2010/11/17 Javascript
详细介绍8款超实用JavaScript框架
2013/10/25 Javascript
NodeJS的url截取模块url-extract的使用实例
2013/11/18 NodeJs
js实现的页面矩阵图形变换特效
2016/01/26 Javascript
使用contextMenu插件实现Bootstrap table弹出右键菜单
2017/02/20 Javascript
vue 中自定义指令改变data中的值
2017/06/02 Javascript
Vue中计算属性computed的示例解读
2017/07/26 Javascript
vue组件父子间通信详解(三)
2017/11/07 Javascript
浅谈Vue.js中ref ($refs)用法举例总结
2017/12/19 Javascript
webpack + vue 打包生成公共配置文件(域名) 方便动态修改
2019/08/29 Javascript
Windows下安装 node 的版本控制工具 nvm
2020/02/06 Javascript
vue fetch中的.then()的正确使用方法
2020/04/17 Javascript
微信小程序返回上一级页面的实现代码
2020/06/19 Javascript
Python实现的特征提取操作示例
2018/12/03 Python
Flask之请求钩子的实现
2018/12/23 Python
python实现爬山算法的思路详解
2019/04/09 Python
python验证身份证信息实例代码
2019/05/06 Python
Python Django框架防御CSRF攻击的方法分析
2019/10/18 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
2020/04/22 Python
html5 canvas实现给图片添加平铺水印
2019/08/20 HTML / CSS
html5视频媒体标签video的使用方法及完整参数说明详解
2019/09/27 HTML / CSS
捷克多品牌在线时尚商店:ANSWEAR.cz
2020/10/03 全球购物
高中班长自我鉴定
2013/12/20 职场文书
安全生产网格化管理实施方案
2014/03/01 职场文书
创建卫生先进单位实施方案
2014/03/10 职场文书
初三学生个人自我评定
2014/04/06 职场文书
领导班子奢靡之风查摆问题及整改措施
2014/09/27 职场文书
黑暗中的舞者观后感
2015/06/18 职场文书
python基础之类属性和实例属性
2021/10/24 Python
Python 的演示平台支持 WSGI 接口的应用
2022/04/20 Python
在 Python 中利用 Pool 进行多线程
2022/04/24 Python