Laravel--Facades门面

使用Laravel框架必不可少的会用到它很多强大的门面类(Facades),门面提供了一个“静态”接口到服务容器中绑定的类

我们首先创建一个需要绑定到服务容器的Test类:

<?php namespace App\Facades; class Test { public function doSomething() { echo 'This is TestClass\'s method doSomething'; } }

然后创建一个静态指向Test类的门面类TestClass:

<?php namespace App\Facades; use Illuminate\Support\Facades\Facade; class TestClass extends Facade { protected static function getFacadeAccessor() { return 'test'; } }

接下来我们要在服务提供者中绑定Test类到服务容器,修改TestServiceProvider类(代码修改自上一节服务提供者)如下:

<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use App\Services\TestService; use App\Facades\Test; class TestServiceProvider extends ServiceProvider { /** * Bootstrap the application services. * * @return void */ public function boot() { } /** * Register the application services. * * @return void */ public function register() { $this->app->singleton('test',function(){ //return new TestService(); return new Test; }); $this->app->bind('App\Contracts\TestContract',function(){ return new TestService(); }); } }

再然后需要到配置文件config/app.php中注册门面类别名:

'aliases' => [

    ...//其他门面类别名映射

    'TestClass' => App\Facades\TestClass::class,
],

最后修改TestController代码如下:

<?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;
    }

    /** * Display a listing of the resource. * * @return Response */
    public function index() {
        // $test = App::make('test');
        // $test->callMe('TestController');
        //$this->test->callMe('TestController');

       TestClass::doSomething();
    }

    ...//其他方法
}

注意:不要忘了在调用门面类TestClass的文件顶部使用use TestClass;引入TestClass,否则将不能正确调用。

好了,我们可以去浏览器中测试了,访问http://selfstudy.com/test,页面将会输出:

This is TestClass's method doSomething

你可能感兴趣的:(laravel,Facades)