门面为应用的服务容器中的绑定类提供了一个“静态”接口。
Laravel 自带的门面,以及创建的自定义门面,都会继承自 Illuminate\Support\Facades\Facade 基类。门面类只需要实现一个方法:getFacadeAccessor。正是 getFacadeAccessor 方法定义了从容器中解析什么,然后 Facade 基类使用魔术方法 __callStatic() 从你的门面中调用解析对象。
可以直接的,很简单的使用,但我还是希望通过接口来实现,具体好处,以后你就懂了
定义接口
- <?php
- namespace App\Repositories\Contracts;
-
- /**
- * Created by PhpStorm.
- * Date: 2016/12/6
- * Time: 10:15
- */
- interface UserInterface
- {
- /**
- * @param $id
- * @return mixed
- */
- public function findBy($id);
-
- public function toAll();
- }
实现类
注意类名
- <?php
- /**
- * Created by PhpStorm.
- * Date: 2016/12/6
- * Time: 11:24
- */
-
- namespace App\Repositories\Eloquent;
-
- use App\Repositories\Contracts\UserInterface;
- use App\User;
-
- class UserFacadeRepository implements UserInterface
- {
- public function findBy($id)
- {
- return 1;
- }
-
- public function toAll()
- {
- return User::all();
- }
-
- }
服务提供者
- public function register()
- { //注册组件名称
- $this->app->singleton('UsersFacadeRepository', function ($app) {
- return new \App\Repositories\Eloquent\UserFacadeRepository(); //实现的类名
- });
- 或者bind来实现:
- // 绑定
- $this->app->bind('App\Repositories\Contracts\UserInterface', 'App\Repositories\Eloquent\UserServiceRepository');
- }
- }
定义Facade
建立个Facade文件夹
- <?php
- namespace App\Facades;
-
- /**
- * Created by PhpStorm.
- * Date: 2016/12/6
- * Time: 11:31
- */
- use Illuminate\Support\Facades\Facade;
- class UserFacade extends Facade
- {
- protected static function getFacadeAccessor() {
- return 'UsersFacadeRepository'; //组件注册名称
- }
- }
-
注册门面项中
'aliases'数组中
- 'UserFacade' => App\Facades\UserFacade::class,
在'providers' 中
- App\Providers\UsersServiceProvider::class,
注意:刚我们新建了服务提供者,别忘了添加
实现方法
- dd(UserFacade::findBy(1));