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 相关文章推荐
不用iconv库的gb2312与utf-8的互换函数
Oct 09 PHP
完美实现GIF动画缩略图的php代码
Jan 02 PHP
基于PHP给大家讲解防刷票的一些技巧
Nov 18 PHP
一个简单的php路由类
May 29 PHP
PHP读取文件的常见几种方法
Nov 03 PHP
php+ajax无刷新上传图片的实现方法
Dec 06 PHP
PHP+JQUERY操作JSON实例
Mar 23 PHP
PHP实现正则表达式分组捕获操作示例
Feb 03 PHP
实现PHP中session存储及删除变量
Oct 15 PHP
thinkphp5使用无限极分类
Feb 18 PHP
php 策略模式原理与应用深入理解
Sep 25 PHP
php源码的使用方法讲解
Sep 26 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
合作指挥官:孟斯克
2020/03/16 星际争霸
图形数字验证代码
2006/10/09 PHP
全文搜索和替换
2006/10/09 PHP
Drupal7 form表单二次开发要点与实例
2014/03/02 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
2016/09/23 PHP
jQuery 1.0.2
2006/10/11 Javascript
javascript 兼容FF的onmouseenter和onmouseleave的代码
2008/07/19 Javascript
JavaScript 开发中规范性的一点感想
2009/06/23 Javascript
Javascript在IE和FireFox中的不同表现简析
2012/12/03 Javascript
jQuery实现“扫码阅读”功能
2015/01/21 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
Vue.js实例方法之生命周期详解
2017/07/03 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
2018/03/13 Javascript
React Native悬浮按钮组件的示例代码
2018/04/05 Javascript
vue+element项目中过滤输入框特殊字符小结
2019/08/07 Javascript
深入理解 TypeScript Reflect Metadata
2019/12/12 Javascript
微信小程序实现滑动操作代码
2020/04/23 Javascript
JS 获取文件后缀,判断文件类型(比如是否为图片格式)
2020/05/09 Javascript
ES6扩展运算符和rest运算符用法实例分析
2020/05/23 Javascript
详解配置Django的Celery异步之路踩坑
2018/11/25 Python
python消费kafka数据批量插入到es的方法
2018/12/27 Python
python linecache 处理固定格式文本数据的方法
2019/01/08 Python
决策树剪枝算法的python实现方法详解
2019/09/18 Python
pytorch 改变tensor尺寸的实现
2020/01/03 Python
CSS3制作气泡对话框的实例教程
2016/05/10 HTML / CSS
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
法制宣传口号
2014/06/16 职场文书
市场策划求职信
2014/08/07 职场文书
小学运动会演讲稿
2014/08/25 职场文书
超市开业庆典活动策划方案
2014/09/15 职场文书
学习十八大标语
2014/10/09 职场文书
导游词之镇江焦山
2019/11/21 职场文书
HTML+css盒子模型案例(圆,半圆等)“border-radius” 简单易上手
2021/05/10 HTML / CSS
Java Spring 控制反转(IOC)容器详解
2021/10/05 Java/Android
SQL Server表分区删除详情
2021/10/16 SQL Server
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android