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中使用Oracle数据库(1)
Oct 09 PHP
PHP 数组排序方法总结 推荐收藏
Jun 30 PHP
使ecshop模板中可引用常量的实现方法
Jun 02 PHP
浅谈PDO的rowCount函数
Jun 18 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
Aug 31 PHP
PHP处理二进制数据的实现方法
Jun 13 PHP
PHP+mysql+ajax轻量级聊天室实现方法详解
Oct 17 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
Aug 03 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
Sep 16 PHP
php服务器的系统详解
Oct 12 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 PHP
七种PHP开发环境搭建工具
Jun 28 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将页面中点击数量高的链接进行高亮显示的方法
2016/05/30 PHP
Ubuntu上安装yaf扩展的方法
2018/01/29 PHP
使用Modello编写JavaScript类
2006/12/22 Javascript
javascript编程起步(第二课)
2007/02/27 Javascript
JavaScript的Cookies
2008/01/16 Javascript
JS获取当前日期和时间的简单实例
2013/11/19 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
jQuery实现瀑布流布局
2014/12/12 Javascript
最新最热最实用的15个jQuery插件汇总
2015/07/05 Javascript
深入浅析JavaScript中的arguments对象(强力推荐)
2016/06/03 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
微信小程序教程之本地图片上传(leancloud)实例详解
2016/11/16 Javascript
教你快速搭建Node.Js服务器的方法教程
2017/03/30 Javascript
slideToggle+slideup实现手机端折叠菜单效果
2017/05/25 Javascript
Vue.js实现可排序的表格组件功能示例
2019/02/19 Javascript
微信域名检测接口调用演示步骤(含PHP、Python)
2019/12/08 Javascript
vue基于Echarts的拖拽数据可视化功能实现
2020/12/04 Vue.js
[02:53]DOTA2英雄基础教程 山岭巨人小小
2013/12/09 DOTA
在RedHat系Linux上部署Python的Celery框架的教程
2015/04/07 Python
Python函数中*args和**kwargs来传递变长参数的用法
2016/01/26 Python
Python迭代和迭代器详解
2016/11/10 Python
tornado 多进程模式解析
2018/01/15 Python
Python 编码规范(Google Python Style Guide)
2018/05/05 Python
PyQt打开保存对话框的方法和使用详解
2019/02/27 Python
Python中@property的理解和使用示例
2019/06/11 Python
python and or用法详解
2019/06/26 Python
基于python的docx模块处理word和WPS的docx格式文件方式
2020/02/13 Python
python opencv进行图像拼接
2020/03/27 Python
详解python 内存优化
2020/08/17 Python
高一自我鉴定
2013/12/17 职场文书
火车的故事教学反思
2014/02/11 职场文书
婚假请假条格式及范文
2014/04/10 职场文书
学生保证书范文
2014/04/28 职场文书
体育教育毕业生自荐信
2014/06/29 职场文书
2015年反腐倡廉工作总结
2015/05/14 职场文书
ant design charts 获取后端接口数据展示
2022/05/25 Javascript