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实现与ASP Banner组件相似的类
Oct 09 PHP
php生成缩略图的类代码
Oct 02 PHP
解析php中mysql_connect与mysql_pconncet的区别详解
May 15 PHP
php 获取本地IP代码
Jun 23 PHP
使用php判断服务器是否支持Gzip压缩功能
Sep 24 PHP
利用中国天气预报接口实现简单天气预报
Jan 20 PHP
PHP实现图片压缩的两则实例
Jul 19 PHP
Yii使用smsto短信接口的函数demo示例
Jul 13 PHP
Yii CDBCriteria常用方法实例小结
Jan 19 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
Feb 08 PHP
基于php(Thinkphp)+jquery 实现ajax多选反选不选删除数据功能
Feb 24 PHP
PHP与Web页面的交互示例详解一
Aug 04 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数组的维度
2013/06/10 PHP
Codeigniter+PHPExcel实现导出数据到Excel文件
2014/06/12 PHP
thinkPHP5.0框架命名空间详解
2017/03/18 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
2019/10/23 PHP
javascript里的条件判断
2007/02/27 Javascript
JS模板实现方法
2013/04/03 Javascript
js绑定事件this指向发生改变的问题解决方法
2013/04/23 Javascript
网站404页面3秒后跳到首页的实例代码
2013/08/16 Javascript
SinaEditor使用方法详解
2013/12/28 Javascript
BootStrap tab选项卡使用小结
2020/08/09 Javascript
微信小程序 实战实例开发流程详细介绍
2017/01/05 Javascript
微信小程序实现图片预加载组件
2017/01/18 Javascript
javascript数据类型详解
2017/02/07 Javascript
JavaScript中清空数组的三种方式
2017/03/22 Javascript
深入理解Vuex 模块化(module)
2017/09/26 Javascript
js阻止默认右键的下拉菜单方法
2018/01/02 Javascript
Angular中sweetalert弹框的基本使用教程
2018/07/22 Javascript
微信小程序引用iconfont图标的方法
2018/10/22 Javascript
详解vue组件中使用路由方法
2019/02/12 Javascript
JavaScript 性能提升之路(推荐)
2019/04/10 Javascript
这15个Vue指令,让你的项目开发爽到爆
2019/10/11 Javascript
使用kbone解决Vue项目同时支持小程序问题
2019/11/08 Javascript
vue路由守卫,限制前端页面访问权限的例子
2019/11/11 Javascript
vue相同路由跳转强制刷新该路由组件操作
2020/08/05 Javascript
javascript前端和后台进行数据交互方法示例
2020/08/07 Javascript
Python中struct模块对字节流/二进制流的操作教程
2017/01/21 Python
django 通过URL访问上传的文件方法
2019/07/28 Python
基于Python的OCR实现示例
2020/04/03 Python
Smashbox官网:美国知名彩妆品牌
2017/01/05 全球购物
存储过程和sql语句的优缺点
2014/07/02 面试题
市政工程技术专业自荐书
2014/07/06 职场文书
2014年语文教学工作总结
2014/12/17 职场文书
河童之夏观后感
2015/06/11 职场文书
一文搞懂Golang 时间和日期相关函数
2021/12/06 Golang
使用python求解迷宫问题的三种实现方法
2022/03/17 Python
MYSQL常用函数介绍
2022/05/05 MySQL