使用Laravel框架必不可少的会用到它很多强大的Facades,Facades 提供了一个“静态”接口到IoC容器类,也就是说facade 提供了IOC里面的对象(实例)根据官方提供的步骤
一个 IoC 绑定。
一个 facade 类。
一个 facade 别名配置。
但是,由于官方没有给出具体的例子,显得步骤很粗糙,下面我根据开发,给出自己的步骤
(1)创建类
(2)自动加载类
(3)创建Facade(其实也是一个类) 此为门店模式
(4)创建服务提供器(serviceProvideer)
(5)加载服务提供器
(1) 创建自定义类
namespace PaymentGateway;
class Payment {
public function process()
{
echo 'hello world ' ;
}
}
(2) 在composer.json中添加自动加载目录
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php",
<span style="white-space:pre"> </span>"app/PaymentGateway" // 此为自动加载的目录
<span style="white-space:pre"> </span>],
此时一定要使用composer update 这个更新一下autoload文件,这样才能自动加载payment
(3)创建Facade(其实也是一个类)创建门面(此可以返回一个payment实例)
在本地文件中创建 larval/app/PaymentGateway/PayFacade.php namespace PaymentGateway;
use Illuminate\Support\Facades\Facade;
class PayFacade extends Facade
{
protected static function getFacadeAccessor()
{
return 'Payment';
}
}
(4)创建服务提供器(serviceProvideer)
在文件 larval/app/PaymentGateway/PaymentServiceProvider.php方式一
namespace PaymentGateway;
use Illuminate\Support\ServiceProvider;
class PaymentServiceProvider extends ServiceProvider
{
// 所谓的注册其实类似于一个用户在一个网站上注册.之后就是这个网站的用户了,然后下次就可以享受会员的一些优惠,
这里就是把某个类存放在ioc容器中,然后可以直接使用这个类的一些方法了; 所谓的服务提供器也就是类似于网站的注册页面,提供类到ioc的桥梁
public function register()
{
$this->app['Payment'] = $this->app->share(
function ($app) {
return new \PaymentGateway\Payment();
}
);
$this->app->booting(
function () {
$aliases = \Config::get('app.aliases');
if(empty($aliases['PayFacade'])){
$loader = \Illuminate\Foundation\AliasLoader::getInstance();
$loader->alias('Payment','PaymentGateway\PayFacade');
}
}
);
}
}
方式二 或者通过官方的方式创建服务提供器
并且通过官方的方式要添加别名 在app/config/app.php里面添加别名 namespace PaymentGateway;
use Illuminate\Support\ServiceProvider;
class PaymentServiceProvider extends ServiceProvider
{
// 注册一个服务,其实就是把一个类放入ioc中
public function register()
{
$this->app->bindShared('Payment', function($app)
{
return new \PaymentGateway\Payment();
});
}
}
(5) 加载服务提供器
Laravel app/config/app.php 配置文件来加载该ServiceProvideproviders' => array(
'PaymentGateway\PaymentServiceProvider', //自动加载注册服务器
'Illuminate\Foundation\Providers\ArtisanServiceProvider',
'Illuminate\Auth\AuthServiceProvider',
'Illuminate\Cache\CacheServiceProvider',
'Illuminate\Session\CommandsServiceProvider',
)
(6) 别名的创建
aliases' => array(
// 添加别名
'Payment' =>'PaymentGateway\PayFacade',
'App' => 'Illuminate\Support\Facades\App',
<span style="white-space:pre"> </span> 'Artisan' => 'Illuminate\Support\Facades\Artisan',
)
(7) 具体使用 可以有两种方式进行使用
(1) Payment::process(); // 输出hello world(2) $value = App::make('Payment'); // 输出hello world
$value->process();
(二) 你也可以使用instance方法,将一个已经存在的对象接口绑定到容器中:
(1) 绑定实例
在laravel\bootstrap\start.php 文件最下面 添加
$myInstance = new \PaymentGateway\Payment();
$app->instance('test', $myInstance);
(2) 提取实例:
在Controller或者router中提取实例
$value = App::make('test'); // 输出hello world
$value->process();