2017-02-25 64 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 ::'。 –