Laravel中注册Facades的步骤详解


Posted in PHP onMarch 16, 2016

本文讲述了Laravel中注册Facades的步骤。分享给大家供大家参考,具体如下:

在Laravel中将类注册为Fcade可以使用Ioc容器,每次使用这个类的时候只会初始化一次类,类似单例模式,而且可以像使用静态方法调用类的方法,下面是在Laravel中注册Facades的步骤。

1.在项目app目录的Providers/AppServiceProvider.php中的register方法新增方法,代码如下。

/**
 * Register any application services.
 *
 * @return void
 */
public function register()
{
 $this->registerTestModel();
}
private function registerTestModel()
{
 $this->app->singleton('testmodel', function ($app) {
  $model = 'App\Models\Test';
  return new $model();
 });
 $this->app->alias('testmodel', 'App\Models\Test');
}

这里把命名空间是App\Models的Test类注册为单例模式,并且取个别名testmodel.这个Test类的文件位置app/Models/Test.php.

2.建立一个Facade类

在项目根目录app\Facades目录新增文件,如Test.php,代码如下,目录不存在可以新建一个。

<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class Test extends Facade
{
 /**
  * Get the registered name of the component.
  *
  * @return string
  */
 protected static function getFacadeAccessor()
 {
  return 'testmodel';
 }
}

通过继承Facade,重载getFacadeAccessor方法,返回之前绑定的单例模式的类的别名。

3.使用Facade

经过前面的步骤后,可以使用Test这个Facade了,如下示例是在控制器中使用Facade的方式。

<?php
namespace App\Http\Controllers;
use App\Facades\Test;
use Illuminate\Routing\Controller;
class TestController extends Controller
{
 public function __construct()
 {
  Test::show();
  Test::show();
 }
}

先看看这个原始类Test.php的内容:

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Test extends Model
{
 protected $table = 'tt';
 public static $times = 0;
 public function __construct()
 {
  self::$times++;
  parent::__construct();
 }
 public function show()
 {
  echo self::$times . '<br>';
 }
}

经过注册Facade后,调用show方法就是Test::show()的形式,并且类似单例模式不会多次实例化,调用也十分简单。

PS:以上仅为注册Facade的方法和步骤,实际项目中可能还需对Model层进行进一步的封装。

转自:小谈博客 http://www.tantengvip.com/2016/01/laravel-facades-register/

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php处理json时中文问题的解决方法
Apr 12 PHP
PHP安全配置详细说明
Sep 26 PHP
php时间戳格式化显示友好的时间函数分享
Oct 21 PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
Dec 17 PHP
PHP贪婪算法解决0-1背包问题实例分析
Mar 23 PHP
PHP设计模式之适配器模式代码实例
May 11 PHP
PHP session文件独占锁引起阻塞问题解决方法
May 12 PHP
PHP封装函数实现生成随机的字符串验证码
Jan 24 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 PHP
phpcms实现验证码替换及phpcms实现全站搜索功能教程详解
Dec 13 PHP
php实现微信公众平台发红包功能
Jun 14 PHP
php实现图片压缩处理
Sep 09 PHP
PHP与Ajax相结合实现登录验证小Demo
Mar 16 #PHP
Laravel实现构造函数自动依赖注入的方法
Mar 16 #PHP
PHP 二维数组和三维数组的过滤
Mar 16 #PHP
详解php中反射的应用
Mar 15 #PHP
php实现图片上传并进行替换操作
Mar 15 #PHP
php模板引擎技术简单实现
Mar 15 #PHP
9个比较实用的php代码片段
Mar 15 #PHP
You might like
dedecms采集中可以过滤多行代码的正则表达式
2007/03/17 PHP
用PHP程序实现支持页面后退的两种方法
2008/06/30 PHP
PHP实现变色验证码实例
2014/01/06 PHP
php in_array() 检查数组中是否存在某个值详解
2016/11/23 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
2019/10/17 PHP
javascript 精粹笔记
2010/05/09 Javascript
指定区域的图片自动按比例缩小的js代码(防止页面被图片撑破)
2014/02/21 Javascript
jQuery中:first选择器用法实例
2014/12/30 Javascript
JavaScript导航脚本判断当前导航
2016/07/12 Javascript
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
JavaScript基于扩展String实现替换字符串中index处字符的方法
2017/06/13 Javascript
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
2017/09/19 NodeJs
Vue.js项目模板搭建图文教程
2017/09/20 Javascript
详解Nodejs mongoose
2018/06/10 NodeJs
Angular实现svg和png图片下载实现
2019/05/05 Javascript
ElementUI Tag组件实现多标签生成的方法示例
2019/07/08 Javascript
JavaScript 作用域实例分析
2019/10/02 Javascript
python numpy函数中的linspace创建等差数列详解
2017/10/13 Python
numpy中索引和切片详解
2017/12/15 Python
python实现淘宝秒杀脚本
2020/06/23 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
2020/02/29 Python
解决jupyter notebook 出现In[*]的问题
2020/04/13 Python
Python自带的IDE在哪里
2020/07/01 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
2020/11/28 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
2020/12/01 Python
环境工程求职简历的自我评价范文
2013/10/24 职场文书
会计电算化专业毕业生推荐信
2013/12/24 职场文书
法警的竞聘演讲稿
2014/01/02 职场文书
教学实习自我评价
2014/01/28 职场文书
对标管理实施方案
2014/03/12 职场文书
2014年工程师工作总结
2014/11/25 职场文书
红领巾广播站广播稿
2015/08/19 职场文书
《小摄影师》教学反思
2016/02/18 职场文书
python3读取文件指定行的三种方法
2021/05/24 Python
springboot为异步任务规划自定义线程池的实现
2022/06/14 Java/Android
python中使用redis用法详解
2022/12/24 Redis