欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

laravel 门面模式

门面为应用的服务容器中的绑定类提供了一个“静态”接口。
Laravel 自带的门面,以及创建的自定义门面,都会继承自 Illuminate\Support\Facades\Facade 基类。门面类只需要实现一个方法:getFacadeAccessor。正是 getFacadeAccessor 方法定义了从容器中解析什么,然后 Facade 基类使用魔术方法 __callStatic() 从你的门面中调用解析对象。

 

可以直接的,很简单的使用,但我还是希望通过接口来实现,具体好处,以后你就懂了

 

定义接口


    1. <?php
    2. namespace App\Repositories\Contracts;
    3.  
    4. /**
    5. * Created by PhpStorm.
    6. * Date: 2016/12/6
    7. * Time: 10:15
    8. */
    9. interface UserInterface
    10. {
    11. /**
    12. * @param $id
    13. * @return mixed
    14. */
    15. public function findBy($id);
    16.  
    17. public function toAll();
    18. }

实现类

注意类名


    1. <?php
    2. /**
    3. * Created by PhpStorm.
    4. * Date: 2016/12/6
    5. * Time: 11:24
    6. */
    7.  
    8. namespace App\Repositories\Eloquent;
    9.  
    10. use App\Repositories\Contracts\UserInterface;
    11. use App\User;
    12.  
    13. class UserFacadeRepository implements UserInterface
    14. {
    15. public function findBy($id)
    16. {
    17. return 1;
    18. }
    19.  
    20. public function toAll()
    21. {
    22. return User::all();
    23. }
    24.  
    25. }

服务提供者


    1. public function register()
    2. { //注册组件名称
    3. $this->app->singleton('UsersFacadeRepository', function ($app) {
    4. return new \App\Repositories\Eloquent\UserFacadeRepository(); //实现的类名
    5. });
    6. 或者bind来实现:
    7. // 绑定
    8. $this->app->bind('App\Repositories\Contracts\UserInterface', 'App\Repositories\Eloquent\UserServiceRepository');
    9. }
    10. }

定义Facade

建立个Facade文件夹


    1. <?php
    2. namespace App\Facades;
    3.  
    4. /**
    5. * Created by PhpStorm.
    6. * Date: 2016/12/6
    7. * Time: 11:31
    8. */
    9. use Illuminate\Support\Facades\Facade;
    10. class UserFacade extends Facade
    11. {
    12. protected static function getFacadeAccessor() {
    13. return 'UsersFacadeRepository'; //组件注册名称
    14. }
    15. }
    16.  

注册门面项中

'aliases'数组中


    1. 'UserFacade' => App\Facades\UserFacade::class,

在'providers' 中


    1. App\Providers\UsersServiceProvider::class,

 

注意:刚我们新建了服务提供者,别忘了添加

 

实现方法


    1. dd(UserFacade::findBy(1));

 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明laravel 门面模式
来自  https://www.bowsu.com/laravel-%E9%97%A8%E9%9D%A2%E6%A8%A1%E5%BC%8F/
普通分类: