自定义 class 和服务提供商 - Laravel 5.4

Custom class and ServiceProvider - Laravel 5.4

我尝试在 laravel 5.4 中创建一个新的自定义 class 来检查用户类型。

我把这个新的 class 添加到一个新文件夹 app\ItSolution 中,代码:

<?php

namespace App\ItSolution;

class DemoClass {


    public function getPermission() {
        switch(Auth::user()->user_type_id) {
            case 1:
                return 'admin';
                break;
            case 2:
                return 'promoter';
                break;
            case 3:
                return 'customer';
                break;
            default:
                return false;
        }
    }
}

我想在我所有的应用程序中使用这个 class,所以我尝试创建一个新的 ServiceProvider,代码:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App;

class AuthLibServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
       App::bind('democlass', function()
        {
            return new \App\ItSolution\DemoClass;
        });
    }
}

然后我在同一个文件夹 app\ItSolution 中为我的 class 创建了一个新外观,代码:

<?php

namespace App\ItSolution;
use Illuminate\Support\Facades\Facade;

class DemoClassFacade extends Facade {
    protected static function getFacadeAccessor() { return 'democlass'; }
}

之后,我在 app/config 中添加了这一行。php

'aliases' => [
...
'DemoClass'=> App\ItSolution\DemoClassFacade::class,
]



'providers' => [
    ...
    App\Providers\AuthLibServiceProvider::class,
    ]

但是当我尝试在我的控制器中使用 DemoClass 别名时出现这个错误 DemoClass::getPermission():

Class 'App\Http\Controllers\DemoClass' not found

请问我该如何解决这个问题,Thnaks。

您正在将此 class 注册为外观,因此您需要将其添加到 class:

的开头
use DemoClass;

或者你可以在使用 facade 时只使用完整的命名空间:

\DemoClass::

在laravel 5.4中你不需要服务提供者来注册外观,你可以使用自动外观,你只需要定义DemoClass。

即在控制器中:

use Facades\ {
   App\ItSolution\DemoClass
};

并调用函数

DemoClass::getPermission()

来源here