laravel 创建自己的 facade

laravel 创建自己的 facade_php_web-itnose

首页
asp
php
javascript
iis
apache
html/css
coldfusion
ajax
vbscript
cgi
xml/xsl
跨浏览器开发
ruby/rails
程序员
html5
jquery
seo
jboss
json
angularjs
markdown
nginx
thinkphp
yii
pageadmin
extjs
wampserver
kendo ui
coffeescript
gulp
ecmascript
bootstrap

itnose首页 > web > php >

laravel 创建自己的 facade

2017-06-13 11:24

我的博客原文: http://www.qinblog.net/articl…

前言

laravel 提供了一个灵活的模式,那就是 facade 。框架内部的 db、auth、file 等功能也有相关的 facade 实现。那么,该如何写自己的 facade 呢?

facade 是什么?

首先,facade 并不是 laravel 独有的东西,它就是设计模式中的外观模式(facade)。当然,这里就不长篇大论去讨论外观模式的定义了。这篇文章写的很不错 : 设计模式(九)外观模式facade(结构型)。那么,laravel 的 facade 做了什么?同样的, laravel 实现了外观模式的开关功能,并且使用魔术方法 __callstatic 实现了静态方式调用、动态创建对象的功能。参考 (官方文档)

当然你可能觉得这些概念很抽象,都什么玩意。那么其实简单的讲,laravel 的 facade 就是将某些功能封装成工具类,而且能以静态方式调用工具类的方法。

建立自己的 facade

首先、以 laravel 5.1 框架,我之前写过的 geoip facade 为例,说一下怎么去建立自己的 facade。

下载 geoip 扩展

geoip 是一个可以更具 ip 获取国家、地域、城市信息的 php 扩展,基于 maxmind 数据库。 github 在此。

首先,为 laravel 添加 geoip 扩展。打开 composer.json,添加 “geoip2/geoip2”: “~2.0” 到 require。项目根目录运行 composer update ( 需要安装 composer )更新一下,geoip 的依赖和软件包就被下载到 vendor 文件夹中了。

然后下载 geoip 依赖的数据库,免费库的地址 : geolite2

我下载了 geolite2 country 和 geolite2 city 库,放到了 storage/geoipdb 中。

建立 facade。

在 app 目录下新建 facades 文件夹,里面新建 facades/geoip/geoip.php 和 facades/geoip/facade/geoip.php (建议每个功能新建一个文件夹区分,比如我这里给 geoip 新建一个文件夹,关于geoip 的东西全放到这里)注意,facades/geoip 下的 geoip.php 是你要对 geoip 扩展进行封装的类, facades/geoip/facade 下的 geoip.php 是你的 facade,用来给 laravel 解析使用,这两个文件可以不同名。

目录结构如图:

facades/geoip/facade/geoip.php 如下

Posted in 未分类