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中输出转义JavaScript代码的实现代码
Apr 22 PHP
php curl常见错误:SSL错误、bool(false)
Dec 28 PHP
解析php file_exists无效的解决办法
Jun 26 PHP
PHP限制页面只能在微信自带浏览器访问的代码
Jan 15 PHP
ThinkPHP之import方法实例详解
Jun 20 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
Mar 15 PHP
PHP数据库处理封装类实例
Dec 24 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
Jun 19 PHP
php生成毫秒时间戳的实例讲解
Sep 22 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
Apr 10 PHP
php5对象复制、clone、浅复制与深复制实例详解
Aug 14 PHP
PHP 技巧 * SVG 保存为图片(分享图生成)
Apr 02 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
php5 图片验证码实现代码
2009/12/11 PHP
php file_exists 检查文件或目录是否存在的函数
2010/05/10 PHP
PHP输出XML到页面的3种方法详解
2013/06/06 PHP
PHP 如何获取二维数组中某个key的集合
2014/06/03 PHP
PHP命令行执行整合pathinfo模拟定时任务实例
2016/08/12 PHP
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
javascript中有趣的反柯里化深入分析
2012/12/05 Javascript
Script标签与访问HTML页面详解
2014/01/10 Javascript
JS替换字符串中空格方法
2015/04/17 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
2016/02/18 Javascript
学习使用jquery iScroll.js移动端滚动条插件
2020/03/24 Javascript
获取jqGrid中选择的行的数据
2016/11/30 Javascript
微信小程序中单位rpx和rem的使用
2016/12/06 Javascript
javascript html5轻松实现拖动功能
2017/03/01 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
vue+webpack 打包文件 404 页面空白的解决方法
2018/02/28 Javascript
nuxt.js中间件实现拦截权限判断的方法
2018/11/21 Javascript
javascript实现简易计算器功能
2020/09/23 Javascript
js 实现碰撞检测的示例
2020/10/28 Javascript
详解如何使用Python编写vim插件
2017/11/28 Python
python使用Matplotlib画饼图
2018/09/25 Python
Python3.5运算符操作实例详解
2019/04/25 Python
python 创建一维的0向量实例
2019/12/02 Python
Python安装whl文件过程图解
2020/02/18 Python
Python 格式化打印json数据方法(展开状态)
2020/02/27 Python
解决python调用自己文件函数/执行函数找不到包问题
2020/06/01 Python
Python map及filter函数使用方法解析
2020/08/06 Python
CSS中的字体大小设置属性总结
2016/05/24 HTML / CSS
Doyoueven官网:澳大利亚健身服饰和配饰品牌
2019/03/24 全球购物
浙大网新C/C++面试解惑
2015/05/27 面试题
国庆节文艺活动方案
2014/02/03 职场文书
幼儿园教学管理制度
2014/02/04 职场文书
能源工程专业应届生求职信
2014/03/01 职场文书
双语教学实施方案
2014/03/23 职场文书
土地转让协议书范本
2014/04/15 职场文书
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android