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 管理系统程序中的后门
Aug 05 PHP
PHP获取用户的浏览器与操作系统信息的代码
Sep 04 PHP
PHP正确解析UTF-8字符串技巧应用
Nov 07 PHP
zf框架的Filter过滤器使用示例
Mar 13 PHP
ThinkPHP3.1新特性之多层MVC的支持
Jun 19 PHP
浅析PHP中strlen和mb_strlen的区别
Aug 31 PHP
php自动给网址加上链接的方法
Jun 02 PHP
PHP分页初探 一个最简单的PHP分页代码的简单实现
Jun 21 PHP
php使用curl下载指定大小的文件实例代码
Sep 30 PHP
laravel 数据迁移与 Eloquent ORM的实现方法
Apr 12 PHP
php libevent 功能与使用方法详解
Mar 04 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生成随机密码的几种方法
2011/01/17 PHP
php实现图片缩放功能类
2013/12/18 PHP
php获取apk包信息的方法
2014/08/15 PHP
用php守护另一个php进程的例子
2015/02/13 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
2015/03/07 PHP
取得窗口大小 兼容所有浏览器的js代码
2011/08/09 Javascript
js前台判断开始时间是否小于结束时间
2012/02/23 Javascript
jQuery插件dataTables添加序号列的方法
2016/07/06 Javascript
BootStrap轮播HTML代码(推荐)
2016/12/10 Javascript
Vue单文件组件的如何使用方式介绍
2017/07/28 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
实例详解vue.js浅度监听和深度监听及watch用法
2018/08/16 Javascript
vue里面使用mui的弹出日期选择插件实例
2018/09/16 Javascript
vue-cli项目修改文件热重载失效的解决方法
2018/09/19 Javascript
JS实现可用滑块滑动的缓动图代码
2019/09/01 Javascript
vue + elementUI实现省市县三级联动的方法示例
2019/10/29 Javascript
vue 路由守卫(导航守卫)及其具体使用
2020/02/25 Javascript
Laravel 如何在blade文件中使用Vue组件的示例代码
2020/06/28 Javascript
vue 解决兄弟组件、跨组件深层次的通信操作
2020/07/27 Javascript
Python创建日历实例
2014/08/21 Python
HTML中使用python屏蔽一些基本功能的方法
2017/07/07 Python
Python2包含中文报错的解决方法
2018/07/09 Python
python合并已经存在的sheet数据到新sheet的方法
2018/12/11 Python
python对csv文件追加写入列的方法
2019/08/01 Python
python logging模块的使用详解
2020/10/23 Python
python drf各类组件的用法和作用
2021/01/12 Python
Python字符串的15个基本操作(小结)
2021/02/03 Python
英国高档百货连锁店:John Lewis
2017/11/20 全球购物
英国最大的LED专业零售商:Led Hut
2018/03/16 全球购物
英国现代家具和装饰网站:PN Home
2018/08/16 全球购物
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
2014/09/09 面试题
JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
2013/07/02 面试题
架构师岗位职责
2013/11/18 职场文书
庆祝国庆节演讲稿2014
2014/09/19 职场文书
自我推荐信格式模板
2015/03/24 职场文书
pandas数值排序的实现实例
2021/07/25 Python