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程序
Oct 09 PHP
模仿OSO的论坛(二)
Oct 09 PHP
PHP与SQL注入攻击[二]
Apr 17 PHP
PHP统计目录下的文件总数及代码行数(去除注释及空行)
Jan 17 PHP
iis下php mail函数的sendmail配置方法(官方推荐)
Apr 25 PHP
php stream_get_meta_data返回值
Sep 29 PHP
详解Window7 下开发php扩展
Dec 31 PHP
thinkPHP数据库增删改查操作方法实例详解
Dec 06 PHP
在PHP中输出JS语句以及乱码问题的解决方案
Feb 13 PHP
php使用socket调用http和smtp协议实例小结
Jul 26 PHP
php中错误处理操作实例分析
Aug 23 PHP
在 PHP 和 Laravel 中使用 Traits的方法
Nov 13 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中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
php截取html字符串及自动补全html标签的方法
2015/01/15 PHP
PHP 常用的header头部定义汇总
2015/06/19 PHP
Zend Framework基本页面布局分析
2016/03/19 PHP
mysql desc(DESCRIBE)命令实例讲解
2016/09/24 PHP
Django 标签筛选的实现代码(一对多、多对多)
2018/09/05 PHP
php如何计算两坐标点之间的距离
2018/12/29 PHP
PHP基于面向对象封装的分页类示例
2019/03/15 PHP
php文件后缀不强制为.php的实操方法
2019/09/18 PHP
php解析非标准json、非规范json的方式实例
2020/12/10 PHP
JavaScript获取页面上某个元素的代码
2011/03/13 Javascript
ListBox实现上移,下移,左移,右移的简单实例
2014/02/13 Javascript
jquery可定制的在线UEditor编辑器
2015/11/17 Javascript
Jquery跨浏览器文本复制插件Zero Clipboard的使用方法
2016/02/28 Javascript
Bootstrap 附加导航(Affix)插件实例详解
2016/06/01 Javascript
js只执行1次的函数示例
2016/07/20 Javascript
AngularJS 服务详细讲解及示例代码
2016/08/17 Javascript
清除浏览器缓存的几种方法总结(必看)
2016/12/09 Javascript
JS数组去重(4种方法)
2017/03/27 Javascript
VueJS如何引入css或者less文件的一些坑
2017/04/25 Javascript
React 高阶组件入门介绍
2018/01/11 Javascript
一步步教会你微信小程序的登录鉴权
2018/04/09 Javascript
原生实现一个react-redux的代码示例
2018/06/08 Javascript
vue中如何让子组件修改父组件数据
2018/06/14 Javascript
jQuery Ajax实现Select多级关联动态绑定数据的实例代码
2018/10/26 jQuery
vue在自定义组件中使用v-model进行数据绑定的方法
2019/03/25 Javascript
在Vue中使用Select选择器拼接label的操作
2020/10/22 Javascript
把大数据数字口语化(python与js)两种实现
2013/02/21 Python
Sublime开发python程序的示例代码
2018/01/24 Python
完美解决python针对hdfs上传和下载的问题
2020/06/05 Python
使用canvas绘制贝塞尔曲线
2014/12/17 HTML / CSS
英国女性化妆品收纳和家具网站:Beautify
2019/12/07 全球购物
EJB的角色和三个对象
2015/12/31 面试题
幼儿园教师培训方案
2014/02/04 职场文书
优秀团支部申报材料
2014/12/26 职场文书
JS前端宏任务微任务及Event Loop使用详解
2022/07/23 Javascript