自定义类和ServiceProvider - Laravel 5.4

时间:2017-02-25 12:42:05

标签: php laravel laravel-5 laravel-5.4

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

我将这个新类添加到新文件夹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;
        }
    }
}

我想在我的所有应用中使用这个类,所以我尝试创建一个新的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,代码:

为我的班级创建一个新的外观
<?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():

  

未找到类'App \ Http \ Controllers \ DemoClass'

我怎么能解决这个问题,Thnaks。

2 个答案:

答案 0 :(得分:1)

您已将此课程注册为外观,因此您需要将此课程添加到课程开头:

use DemoClass;

或者,您可以在使用外观时使用完整命名空间:

\DemoClass::

答案 1 :(得分:1)

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

即在控制器中:

use Facades\ {
   App\ItSolution\DemoClass
};

并调用函数

DemoClass::getPermission()

来源here