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 相关文章推荐
加速XP搜索功能堪比vista
Mar 22 PHP
用php实现批量查询清除一句话后门的代码
Jan 20 PHP
用PHP获取Google AJAX Search API 数据的代码
Mar 12 PHP
PHP数组传递是值传递而非引用传递概念纠正
Jan 31 PHP
PHP实现数字补零功能的2个函数介绍
May 12 PHP
PHP中变量引用与变量销毁机制分析
Nov 15 PHP
PHP匿名函数和use子句用法实例
Mar 16 PHP
php 如何获取文件的后缀名
Jun 05 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
Dec 02 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
Mar 01 PHP
tp5框架的增删改查操作示例
Oct 31 PHP
PHP实现微信公众号验证Token的示例代码
Dec 16 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 session机制
2011/07/17 PHP
php数组排序usort、uksort与sort函数用法
2014/11/17 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
php实现微信支付之企业付款
2018/05/30 PHP
TP5框架简单登录功能实现方法示例
2019/10/31 PHP
用javascript实现给图片加链接
2007/08/15 Javascript
基于jquery的合并table相同单元格的插件(精简版)
2011/04/05 Javascript
基于jQuery实现下拉收缩(展开与折叠)特效
2012/12/25 Javascript
Jquery实现带动画效果的经典二级导航菜单
2013/03/22 Javascript
js为鼠标添加右击事件防止默认的右击菜单弹出
2013/07/29 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
JavaScript中实现map功能代码分享
2015/06/11 Javascript
jquery+css实现动感的图片切换效果
2015/11/25 Javascript
AngularJS进行性能调优的7个建议
2015/12/28 Javascript
基于javascript实现全国省市二级联动下拉选择菜单
2016/01/28 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
2018/03/28 jQuery
nodejs多版本管理总结
2018/04/03 NodeJs
微信小程序实现页面监听自定义组件的触发事件
2020/11/01 Javascript
python中利用await关键字如何等待Future对象完成详解
2017/09/07 Python
Python3操作SQL Server数据库(实例讲解)
2017/10/21 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
2018/05/16 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
python 多进程共享全局变量之Manager()详解
2019/08/15 Python
关于matplotlib-legend 位置属性 loc 使用说明
2020/05/16 Python
python 6行代码制作月历生成器
2020/09/18 Python
CSS3 calc()会计算属性详解
2018/02/27 HTML / CSS
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
Ivory Isle Designs美国/加拿大:婚礼和活动文具公司
2018/08/21 全球购物
eDreams加拿大:廉价航班、酒店和度假
2019/03/29 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2013/01/18 面试题
写给女朋友的道歉信
2014/01/12 职场文书
个人作风剖析材料
2014/02/02 职场文书
领导班子四风表现材料
2014/08/23 职场文书
学习三严三实心得体会
2014/10/13 职场文书
考试作弊万能检讨书
2014/10/19 职场文书
小石潭记导游词
2015/02/03 职场文书