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导出MySQL数据到Excel文件(fputcsv)
Jul 03 PHP
php中print(),print_r(),echo()的区别详解
Dec 01 PHP
PHP中$_SERVER使用说明
Jul 05 PHP
基于PHP如何把汉字转化为拼音
Dec 11 PHP
PHP生成制作验证码的简单实例
Jun 12 PHP
php日期操作技巧小结
Jun 25 PHP
php实现基于PDO的预处理示例
Mar 28 PHP
浅谈PHP中的面向对象OOP中的魔术方法
Jun 12 PHP
PHP处理bmp格式图片的方法分析
Jul 04 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
Aug 02 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
Jun 16 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
Oct 13 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错误日志 display_errors与log_errors的区别
2012/10/09 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
2013/12/24 PHP
一个比较不错的PHP日历类分享
2014/11/18 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
2014/11/28 PHP
PHP编程入门的基本语法知识点总结
2016/01/26 PHP
JavaScipt基本教程之前言
2008/01/16 Javascript
JQuery的ajax基础上的超强GridView展示
2009/09/18 Javascript
javascript 获取模态窗口的滚动位置代码
2013/08/06 Javascript
JS中的异常处理方法分享
2013/12/22 Javascript
Node.js中AES加密和其它语言不一致问题解决办法
2014/03/10 Javascript
JQuery获取表格数据示例代码
2014/05/26 Javascript
JQuery遍历json数组的3种方法
2014/11/08 Javascript
JavaScript中的值类型转换介绍
2014/12/31 Javascript
jQuery弹出层插件Lightbox_me使用指南
2015/04/21 Javascript
nodejs实现遍历文件夹并统计文件大小
2015/05/28 NodeJs
javascript禁止访客复制网页内容的实现代码
2015/08/05 Javascript
总结AngularJS开发者最常犯的十个错误
2016/08/31 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
2016/11/02 Javascript
js 原生判断内容区域是否滚动到底部的实例代码
2017/11/15 Javascript
解决bootstrap中下拉菜单点击后不关闭的问题
2018/08/10 Javascript
Angular2中监听数据更新的方法
2018/08/31 Javascript
Vue加载组件、动态加载组件的几种方式
2018/08/31 Javascript
JS实现的贪吃蛇游戏完整实例
2019/01/18 Javascript
Vue表单控件绑定图文详解
2019/02/11 Javascript
150行代码带你实现微信小程序中的数据侦听
2019/05/17 Javascript
vue+ts下对axios的封装实现
2020/02/18 Javascript
JavaScript实现鼠标经过表格某行时此行变色
2020/11/20 Javascript
python中函数传参详解
2016/07/03 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
使用Keras中的ImageDataGenerator进行批次读图方式
2020/06/17 Python
Django实现微信小程序支付的示例代码
2020/09/03 Python
英国电器零售商:PRC Direct
2018/06/21 全球购物
Cinque网上商店:德国服装品牌
2019/03/17 全球购物
给老婆道歉的话
2015/01/20 职场文书
学校食堂食品安全承诺书
2015/04/29 职场文书
如何使用SQL Server语句创建表
2022/04/12 SQL Server