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 相关文章推荐
多文件上传的例子
Oct 09 PHP
九个你必须知道而且又很好用的php函数和特点
Aug 08 PHP
PHP获取windows登录用户名的方法
Jun 24 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
May 13 PHP
php 利用socket发送HTTP请求(GET,POST)
Aug 24 PHP
PHP中__autoload和Smarty冲突的简单解决方法
Apr 08 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
Dec 12 PHP
thinkphp修改配置进入默认首页的方法
Feb 07 PHP
php正则提取html图片(img)src地址与任意属性的方法
Feb 08 PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
Aug 07 PHP
PHP 记录访客的浏览信息方法
Jan 29 PHP
关于Curl在Swoole协程中的解决方案详析
Sep 12 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/10/09 PHP
PHP缓存技术的使用说明
2011/08/06 PHP
php上传文件中文文件名乱码的解决方法
2013/11/01 PHP
php上传文件问题汇总
2015/01/30 PHP
php实现面包屑导航例子分享
2015/12/19 PHP
PHP实现数据库的增删查改功能及完整代码
2018/04/18 PHP
PHP+ajax实现获取新闻数据简单示例
2018/05/08 PHP
求数组最大最小值方法适用于任何数组
2013/08/16 Javascript
js取得html iframe中的元素和变量值
2014/06/30 Javascript
Javascript类型系统之undefined和null浅析
2016/07/13 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
2016/10/11 Javascript
微信小程序 Tab页切换更新数据
2017/01/05 Javascript
Bootstrap实现渐变顶部固定自适应导航栏
2020/08/27 Javascript
基于JS实现限时抢购倒计时间表代码
2017/05/09 Javascript
详解plotly.js 绘图库入门使用教程
2018/02/23 Javascript
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
2018/07/13 Javascript
利用JS实现一个同Excel表现的智能填充算法
2018/08/13 Javascript
nodejs中实现用户注册路由功能
2019/05/20 NodeJs
小程序实现搜索框
2020/06/19 Javascript
vue 实现Web端的定位功能 获取经纬度
2019/08/08 Javascript
详解Vue3 Composition API中的提取和重用逻辑
2020/04/29 Javascript
浅谈五大Python Web框架
2017/03/20 Python
Python实现的计算马氏距离算法示例
2018/04/03 Python
用Python读取几十万行文本数据
2018/12/24 Python
一文了解Python并发编程的工程实现方法
2019/05/31 Python
Python持续监听文件变化代码实例
2020/07/22 Python
HTML中fieldset标签概述及使用方法
2013/02/01 HTML / CSS
Canvas 文本填充线性渐变的使用详解
2020/06/22 HTML / CSS
亚洲航空公司官方网站:AirAsia
2019/11/25 全球购物
汽车销售顾问求职自荐信
2014/01/01 职场文书
供货协议书范本
2014/04/22 职场文书
工地门卫岗位职责范本
2014/07/01 职场文书
2015年社区服务活动总结
2015/03/25 职场文书
家庭教育教师培训学习体会
2016/01/14 职场文书
资深HR教你写好简历中的自我评价
2019/05/07 职场文书
导游词之永济鹳雀楼
2020/01/16 职场文书