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 相关文章推荐
Win2000+Apache+MySql+PHP4+PERL安装使用小结
Oct 09 PHP
php环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
Nov 17 PHP
mysql5写入和读出乱码解决
Nov 25 PHP
php 字符转义 注意事项
May 27 PHP
PHP 各种排序算法实现代码
Aug 20 PHP
PHP下通过file_get_contents的代理使用方法
Feb 16 PHP
php定时删除文件夹下文件(清理缓存文件)
Jan 23 PHP
详谈PHP面向对象中常用的关键字和魔术方法
Feb 04 PHP
php实现通过soap调用.Net的WebService asmx文件
Feb 27 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
Apr 24 PHP
thinkPHP框架动态配置用法实例分析
Jun 14 PHP
常见的5个PHP编码小陋习以及优化实例讲解
Feb 27 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
下载文件的点击数回填
2006/10/09 PHP
php HtmlReplace输入过滤安全函数
2010/07/03 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
2015/12/25 PHP
Thinkphp结合ajaxFileUpload实现异步图片传输示例
2017/03/13 PHP
laravel5 Eloquent 实现事务方式
2019/10/21 PHP
使用javascript实现ListBox左右全选,单选,多选,全请
2013/11/07 Javascript
使用js Math.random()函数生成n到m间的随机数字
2014/10/09 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
2014/12/31 Javascript
JavaScript对象数组的排序处理方法
2015/10/21 Javascript
浅析Javascript ES6中的原生Promise
2016/08/25 Javascript
JS动态添加选项案例分析
2016/10/17 Javascript
js学习总结之DOM2兼容处理重复问题的解决方法
2017/07/27 Javascript
js模块加载方式浅析
2017/08/12 Javascript
基于react组件之间的参数传递(详解)
2017/09/05 Javascript
jQuery使用bind函数实现绑定多个事件的方法
2017/10/11 jQuery
node.js实现微信开发之获取用户授权
2019/03/18 Javascript
vue中v-show和v-if的异同及v-show用法
2019/06/06 Javascript
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
JS如何实现手机端输入验证码效果
2020/05/13 Javascript
vue项目实现减少app.js和vender.js的体积操作
2020/11/12 Javascript
[01:15:00]LGD vs Mineski Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
搭建Python的Django框架环境并建立和运行第一个App的教程
2016/07/02 Python
Python查找文件中包含中文的行方法
2018/12/19 Python
pip install python 快速安装模块的教程图解
2019/10/08 Python
python实现差分隐私Laplace机制详解
2019/11/25 Python
python实现简单飞行棋
2020/02/06 Python
犹他州最古老的体育用品公司:Al’s
2020/12/18 全球购物
C++面试题目
2013/06/25 面试题
车间副主任岗位职责
2013/12/24 职场文书
素质教育标语
2014/06/27 职场文书
小学安全教育月活动总结
2014/07/07 职场文书
佛光寺导游词
2015/02/10 职场文书
web前端之css水平居中代码解析
2021/05/20 HTML / CSS
详解python字符串驻留技术
2021/05/21 Python
解析目标检测之IoU
2021/06/26 Python
springboot新建项目pom.xml文件第一行报错的解决
2022/01/18 Java/Android