Laravel框架学习(一) 如何添加Facade


使用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 配置文件来加载该ServiceProvide

providers' => 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();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值