使用Laravel框架必不可少的会用到它很多强大的门面类(Facades),门面提供了一个“静态”接口到服务容器中绑定的类,官方文档阐述了如何使用系统自带的缓存门面,我们这里演示如何创建并使用一个自定义的门面类。
注:本教程基于上一节创建 Service Provider 测试实例服务提供者做部分代码修改,不熟悉的请参阅。
我们首先创建一个需要绑定到服务容器的Test类:
1 2 3 4 5 6 7 8 9 10 11
| <?php
namespace App\Facades;
class Test { public function doSomething() { echo 'This is TestClass\'s method doSomething'; } }
|
然后创建一个静态指向Test类的门面类TestClass:
1 2 3 4 5 6 7 8 9 10 11 12 13
| <?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class TestClass extends Facade { protected static function getFacadeAccessor() { return 'test'; } }
|
接下来我们要在服务提供者中绑定Test类到服务容器,修改TestServiceProvider类如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| <?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider; use App\Services\TestService; use App\Facades\Test;
class TestServiceProvider extends ServiceProvider {
public function boot() {
}
public function register() { $this->app->singleton('test',function(){ return new Test; });
$this->app->bind('App\Contracts\TestContract',function(){ return new TestService(); }); } }
|
再然后需要到配置文件config/app.php中注册门面类别名:
1 2 3 4 5 6
| 'aliases' => [
...
'TestClass' => App\Facades\TestClass::class, ],
|
最后修改TestController代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| <?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests; use App\Http\Controllers\Controller;
use App; use TestClass; use App\Contracts\TestContract;
class TestController extends Controller {
public function __construct(TestContract $test){ $this->test = $test; }
public function index() {
TestClass::doSomething(); }
... }
|
注意:不要忘了在调用门面类TestClass的文件顶部使用use TestClass;
引入TestClass,否则将不能正确调用。
好了,我们可以去浏览器中测试了,访问http://laravel.app:8000/test
,页面将会输出:
This is TestClass's method doSomething