Laravel5为自定义类创建门面

Laravel5创建自定义门面提供服务

所谓门面就是 Facade 类利用了 __callStatic() 魔术方法来延迟调用容器中的对象的方法。
Facades为应用程序的服务容器中可用的类提供了一个「静态」接口。Laravel 自带了很多 Facades ,可以访问绝大部分 Laravel 的功能。Laravel Facades 实际上是服务容器中底层类的「静态代理」,它提供了简洁而富有表现力的语法,甚至比传统的静态方法更具可测试性和扩展性。(Laravel文档)

在Laravel中创建一个自定义的门面

首先,创建一个需要使用的自定义的功能类

<?php 
namespace App\Exceptions;

class Test
{
	public function info()
	{
		echo 'info'; // 自定义实现功能的代码
	}
}

创建一个对应的服务提供类,将自定义的功能类与容器绑定

 <?php 
namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Exceptions\Test;

class TestServiceProvider extends ServiceProvider
{
	public function register()
        {
            $this->app->singleton('test', function($app)
            {
                return new Test;
            });
        }
}

这里的代码就是申明一个服务提供器,这个服务提供器有一个 register的方法。这个方法实现了依赖注入。到这里已经可以执行

App::register('TestServiceProvider ')

完成将自定义的功能类注入到容器中。但是需要手动进行操作,如果需要让Laravel自动进行注入,需要在app/config/app.php 中的 providers数组里面增加一行:

'providers' => [
        …
        App\Providers\TestServiceProvider::class,
],

这样就可以用 App::make(‘test’) 来实例化一个类了,你可能还是会觉得怎么和使用的不一样啊?那么就继续下面的操作吧。

为你的类创建一个门面

<?php 
namespace App\Exceptions\Facades;

use Illuminate\Support\Facades\Facade;

class Test  extends Facade
{
	protected static function getFacadeAccessor()
    {
        return 'test';
    }
}

app/config/app.php 中的 aliases数组为你的类创建一个别名

 'aliases' => [
         …
         'Test' => App\Exceptions\Facades\Test::class,
  ],

这样就可以在你的程序中使用 Test::info() 进行调用方法啦。
如果在执行的时候报了Test类不存在,那么需要重新更新一下Laravel的缓存文件,使用命令:

php artisan config:cache

总结

搭配服务提供器和别名,在laravel中可以更方便的使用自定义的类库以及对laravel进行扩展。
总结一下自定义创建门面的过程:

  1. App\Exceptions 下创建类 Test.php
  2. App\Providers 下创建 TestServiceProvider.php
  3. App\Exceptions\Facades 下创建 Test.php
  4. app/config/app.php 中添加 providersaliases

在创建过程中一定要注意文件所在的命名空间的问题哦,不过这都是小事啦,如果写错,运行的时候都会报出具体的那个文件不存在,在对应去改一下就好啦!

ps:码字不易,如果您觉得对您有所帮助,点击关注一下!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值