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进行扩展。
总结一下自定义创建门面的过程:
- 在 App\Exceptions 下创建类 Test.php
- 在 App\Providers 下创建 TestServiceProvider.php
- 在 App\Exceptions\Facades 下创建 Test.php
- 在 app/config/app.php 中添加 providers 和 aliases
在创建过程中一定要注意文件所在的命名空间的问题哦,不过这都是小事啦,如果写错,运行的时候都会报出具体的那个文件不存在,在对应去改一下就好啦!
ps:码字不易,如果您觉得对您有所帮助,点击关注一下!