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 相关文章推荐
模拟OICQ的实现思路和核心程序(三)
Oct 09 PHP
php函数之子字符串替换&amp;#65279; str_replace
Mar 23 PHP
新手学习PHP的一些基础知识分享
Jul 27 PHP
PHP 文件编程综合案例-文件上传的实现
Jul 03 PHP
php中base64_decode与base64_encode加密解密函数实例
Nov 24 PHP
PHP过滤黑名单关键字的方法
Dec 01 PHP
9条PHP编程小知识及易犯的小错误
Jan 22 PHP
php根据日期或时间戳获取星座信息和生肖等信息
Oct 20 PHP
PHP 接入微信扫码支付总结(总结篇)
Nov 03 PHP
Laravel使用RabbitMQ的方法示例
Jun 18 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
Oct 10 PHP
PHP7 参数处理机制修改
Mar 09 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函数式编程简单示例
2019/08/08 PHP
php实现分页功能的详细实例方法
2019/09/29 PHP
理解JavaScript的caller,callee,call,apply
2009/04/28 Javascript
JavaScript 的方法重载效果
2009/08/07 Javascript
js实现屏蔽默认快捷键调用自定义事件示例
2013/06/18 Javascript
使用JQuery FancyBox插件实现图片展示特效
2015/11/16 Javascript
JavaScript动态设置div的样式的方法
2015/12/26 Javascript
详解AngularJS如何实现跨域请求
2016/08/22 Javascript
JS实现倒计时(天数、时、分、秒)
2016/11/16 Javascript
jquery插件treegrid树状表格的使用方法详解(.Net平台)
2017/01/03 Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
2017/04/10 Javascript
通过JavaScript下载文件到本地的方法(单文件)
2019/03/17 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
2015/04/09 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
2018/04/02 Python
在IPython中执行Python程序文件的示例
2018/11/01 Python
python儿童学游戏编程知识点总结
2019/06/03 Python
python基于Selenium的web自动化框架
2019/07/14 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
2019/10/30 Python
python与c语言的语法有哪些不一样的
2020/09/13 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
2020/11/20 Python
python自动从arxiv下载paper的示例代码
2020/12/05 Python
腾讯技术类校园招聘笔试试题
2014/05/06 面试题
专业实习自我鉴定
2013/10/29 职场文书
军神教学反思
2014/02/04 职场文书
机电一体化专业毕业生自荐信
2014/06/19 职场文书
2014年电厂工作总结
2014/12/04 职场文书
水电工程师岗位职责
2015/02/13 职场文书
建筑安全员岗位职责
2015/02/15 职场文书
2015年五四青年节演讲稿
2015/03/18 职场文书
2015年新教师工作总结
2015/04/28 职场文书
2016银行招聘自荐信
2016/01/28 职场文书
创业计划书之电动车企业
2019/10/11 职场文书
python opencv将多个图放在一个窗口的实例详解
2022/02/28 Python
python机器学习实现oneR算法(以鸢尾data为例)
2022/03/03 Python
MongoDB支持的数据类型
2022/04/11 MongoDB