2017-02-25 48 views
1

我嘗試在laravel 5.4中創建一個新的自定義類來檢查用戶類型。自定義類和ServiceProvider - Laravel 5.4

我在一個新的文件夾的應用程序\ 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; 
     }); 
    } 
} 

我可以把我的類的新門面在同一文件夾中的應用程序\ ItSolution,代碼:

<?php 

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

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

之後,我添加此禮NE在app/config.php文件

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



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

但是,當我嘗試使用DemoClass別名在我的控制器 DemoClass :: getPermission()我有此錯誤:

級「應用程序\ HTTP \ Controllers \ DemoClass'找不到

我該如何解決請Thnaks。

回答

1

在laravel 5.4中,你不需要服務提供者來註冊一個facade,你可以使用自動Facadaes,你只需要定義DemoClass。

即控制器:

use Facades\ { 
    App\ItSolution\DemoClass 
}; 

,並調用函數

DemoClass::getPermission() 

來源here

1

你要註冊這個類作爲門面,所以你需要把它添加到類的開頭:

use DemoClass; 

或使用該門面時,你可以使用完整的命名空間:

\DemoClass:: 
+0

太感謝你了,它的工作,但你如何使用的任何想法正面視圖?謝謝。 –

+0

@MalekBenelouafi我使用helpers而不是facades,所以我不是100%肯定的,但是嘗試使用完全命名空間'\ DemoClass ::'。 –