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 相关文章推荐
通过html表格发电子邮件
Oct 09 PHP
第七节--类的静态成员
Nov 16 PHP
php5中date()得出的时间为什么不是当前时间的解决方法
Jun 30 PHP
php入门教程 精简版
Dec 13 PHP
Session保存到数据库的php类分享
Oct 24 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
Jun 26 PHP
php实现读取超大文件的方法
Jul 28 PHP
PHP中echo和print的区别
Aug 28 PHP
php对关联数组循环遍历的实现方法
Mar 13 PHP
PHP基于单例模式编写PDO类的方法
Sep 13 PHP
php实现生成code128条形码的方法详解
Jul 19 PHP
laravel5实现微信第三方登录功能
Dec 06 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使用GD实现颜色渐变实例
2015/06/02 PHP
使用纯php代码实现页面伪静态的方法
2015/07/25 PHP
PHP实现获取文件mime类型多种方法解析
2020/05/28 PHP
关于viewport,Ext.panel和Ext.form.panel的关系
2009/05/07 Javascript
基于jquery tab切换(防止页面刷新)
2012/05/23 Javascript
使用JQuery和CSS模拟超链接的用户单击事件的实现代码
2012/05/23 Javascript
a标签的href与onclick事件的区别详解
2014/11/12 Javascript
angularjs中的e2e测试实例
2014/12/06 Javascript
JQuery中使用on方法绑定hover事件实例
2014/12/09 Javascript
深入浅析react native es6语法
2015/12/09 Javascript
js获取本机操作系统类型的两种方法
2015/12/19 Javascript
Javascript 普通函数和构造函数的区别
2016/11/05 Javascript
谈谈jQuery之Deferred源码剖析
2016/12/19 Javascript
前端开发之CSS原理详解
2017/03/11 Javascript
Zepto实现密码的隐藏/显示
2017/04/07 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
jQuery实现动态显示select下拉列表数据的方法
2018/02/05 jQuery
JS获取指定月份的天数两种实现方法
2018/06/22 Javascript
JavaScript中为事件指定处理程序的五种方式分析
2018/07/27 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
2018/11/04 Javascript
ES6知识点整理之数组解构和字符串解构的应用示例
2019/04/17 Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
2019/06/13 Javascript
Vue封装的组件全局注册并引用
2019/07/24 Javascript
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
2020/03/25 Javascript
python3使用matplotlib绘制散点图
2019/03/19 Python
Django上线部署之IIS的配置方法
2019/08/22 Python
python实现批量处理将图片粘贴到另一张图片上并保存
2019/12/12 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
python实现126邮箱发送邮件
2020/05/20 Python
Keras SGD 随机梯度下降优化器参数设置方式
2020/06/19 Python
Python抓包并解析json爬虫的完整实例代码
2020/11/03 Python
Zooplus罗马尼亚:宠物食品和配件
2019/11/02 全球购物
教师党员个人整改措施材料
2014/09/16 职场文书
工伤认定行政答辩状
2015/05/22 职场文书