自定义 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
我尝试在 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