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 相关文章推荐
在Windows版的PHP中使用ADO
Oct 09 PHP
PHP中3种生成XML文件方法的速度效率比较
Oct 06 PHP
php实现中文字符截取防乱码方法汇总
Apr 29 PHP
CodeIgniter钩子用法实例详解
Jan 20 PHP
php注册登录系统简化版
Dec 28 PHP
PHP微信支付实例解析
Jul 22 PHP
PHP用FTP类上传文件视频等的简单实现方法
Sep 23 PHP
PHP编程实现阳历转换为阴历的方法实例
Aug 08 PHP
Laravel学习教程之路由模块
Aug 18 PHP
详解PHP字符串替换str_replace()函数四种用法
Oct 13 PHP
PHP如何实现订单的延时处理详解
Dec 30 PHP
PHP页面静态化――纯静态与伪静态用法详解
Jun 05 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
在 PHP 中使用随机数的三个步骤
2006/10/09 PHP
php 批量添加多行文本框textarea一行一个
2014/06/03 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
jquery tools之tooltip
2009/07/25 Javascript
YUI的Tab切换实现代码
2010/04/11 Javascript
FireFox下XML对象转化成字符串的解决方法
2011/12/09 Javascript
javascript中有趣的反柯里化深入分析
2012/12/05 Javascript
JS+JSP checkBox 全选具体实现
2014/01/02 Javascript
淘宝网提供的国内NPM镜像简介和使用方法
2014/04/17 Javascript
js获取json元素数量的方法
2015/01/27 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
2016/06/23 Javascript
javascript类型系统——日期Date对象全面了解
2016/07/13 Javascript
AngularJS路由Ui-router模块用法示例
2017/05/29 Javascript
mpvue+vuex搭建小程序详细教程(完整步骤)
2018/09/30 Javascript
js继承的这6种方式!(上)
2019/04/23 Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
2020/07/18 Javascript
[10:21]2018DOTA2国际邀请赛寻真——Winstrike
2018/08/11 DOTA
python 实现删除文件或文件夹实例详解
2016/12/04 Python
Python os.rename() 重命名目录和文件的示例
2018/10/25 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
2018/12/22 Python
python的pytest框架之命令行参数详解(上)
2019/06/27 Python
Python3安装pip工具的详细步骤
2019/10/14 Python
Python实现鼠标自动在屏幕上随机移动功能
2020/03/14 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
2020/04/27 Python
美国内衣品牌:Leonisa
2016/08/14 全球购物
荷兰电脑专场:Paradigit
2018/05/05 全球购物
39美元购买一副眼镜或太阳镜:39DollarGlasses.com
2018/06/17 全球购物
Ootori在线按摩椅店:一家专业的按摩椅制造商
2019/04/10 全球购物
请说出你所知道的线程同步的方法
2013/04/19 面试题
护理实习自我鉴定
2013/12/14 职场文书
大学四年的个人自我评价
2014/01/14 职场文书
户籍证明书标准模板
2014/09/10 职场文书
意外死亡赔偿协议书
2014/10/14 职场文书
Python超简单容易上手的画图工具库推荐
2021/05/10 Python
windows下快速安装nginx并配置开机自启动的方法
2021/05/11 Servers
如何在C++中调用Python
2021/05/21 Python