流明共享控制器
Lumen shared controller
我写了一个 "Helper" 控制器,我想在其他控制器中使用,但我做错了。 Lumen Service 是我需要的吗?然后就是不知道怎么设置。
我的主要class:
namespace App\Http\Controllers;
use App\Http\Controllers\HelperController as Helper;
class InitController extends Controller
{
public function work($hash, $type)
{
return response()->json([
'answer' => Helper::makeCodeUrl()
]);
}
}
辅助控制器:
namespace App\Http\Controllers;
class HelperController extends Controller
{
public function makeCodeUrl($arr, $type){
return str_random(32);
}
}
记住,控制器负责处理路由逻辑。考虑到这一点,实际上没有 "Helper Controller" 这样的东西,因为没有路由映射到它,因此在传统意义上并不是真正的 "Controller"。
您所描述的是所谓的"Service Class"。任何具有合理复杂性的应用程序都将使用服务 classes 作为将控制器中的所有业务逻辑抽象为可重用组件的方法。
对于您的情况,服务 Class 正是您所需要的。为了构建你自己的,你需要做一些事情:
- 注册一个ServiceProvider
- 添加实际的服务提供者class,并将您的助手服务绑定到应用程序的 IOC 容器
- 创建您的助手服务
- 在您的控制器的构造函数中键入帮助程序服务
- 运行
composer dump-autoload
作为概念的快速证明,这就是最终的样子:
bootstrap/app.php
/*
|--------------------------------------------------------------------------
| Register Service Providers
|--------------------------------------------------------------------------
|
| Here we will register all of the application's service providers which
| are used to bind services into the container. Service providers are
| totally optional, so you are not required to uncomment this line.
|
*/
$app->register(App\Providers\HelperServiceProvider::class);
app/Providers/HelperServiceProvider.php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Services\Helpers\HelperService;
class HelperServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
$this->app->bind(HelperService::class, function(){
return new HelperService;
});
}
}
app/Services\Helpers\HelperService.php
namespace App\Services\Helpers;
class HelperService
{
public function makeCodeUrl(){
return str_random(32);
}
}
InitController.php
namespace App\Http\Controllers;
use App\Services\Helpers\HelperService;
class InitController extends Controller
{
protected $helperService;
public function __construct(HelperService $helperService)
{
$this->helperService = $helperService;
}
public function work($hash, $type)
{
return response()->json([
'answer' => $this->helperService->makeCodeUrl()
]);
}
}
虽然我可以理解这种特定代码模式的学习曲线,但我强烈建议您尽可能多地阅读有关服务提供商的信息。它将被证明在未来变得 非常 有价值,并且将使您能够 bootstrap 整个第 3 方库进入 Laravel 或 Lumen 安装。
我写了一个 "Helper" 控制器,我想在其他控制器中使用,但我做错了。 Lumen Service 是我需要的吗?然后就是不知道怎么设置。
我的主要class:
namespace App\Http\Controllers;
use App\Http\Controllers\HelperController as Helper;
class InitController extends Controller
{
public function work($hash, $type)
{
return response()->json([
'answer' => Helper::makeCodeUrl()
]);
}
}
辅助控制器:
namespace App\Http\Controllers;
class HelperController extends Controller
{
public function makeCodeUrl($arr, $type){
return str_random(32);
}
}
记住,控制器负责处理路由逻辑。考虑到这一点,实际上没有 "Helper Controller" 这样的东西,因为没有路由映射到它,因此在传统意义上并不是真正的 "Controller"。
您所描述的是所谓的"Service Class"。任何具有合理复杂性的应用程序都将使用服务 classes 作为将控制器中的所有业务逻辑抽象为可重用组件的方法。
对于您的情况,服务 Class 正是您所需要的。为了构建你自己的,你需要做一些事情:
- 注册一个ServiceProvider
- 添加实际的服务提供者class,并将您的助手服务绑定到应用程序的 IOC 容器
- 创建您的助手服务
- 在您的控制器的构造函数中键入帮助程序服务
- 运行
composer dump-autoload
作为概念的快速证明,这就是最终的样子:
bootstrap/app.php
/*
|--------------------------------------------------------------------------
| Register Service Providers
|--------------------------------------------------------------------------
|
| Here we will register all of the application's service providers which
| are used to bind services into the container. Service providers are
| totally optional, so you are not required to uncomment this line.
|
*/
$app->register(App\Providers\HelperServiceProvider::class);
app/Providers/HelperServiceProvider.php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Services\Helpers\HelperService;
class HelperServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
$this->app->bind(HelperService::class, function(){
return new HelperService;
});
}
}
app/Services\Helpers\HelperService.php
namespace App\Services\Helpers;
class HelperService
{
public function makeCodeUrl(){
return str_random(32);
}
}
InitController.php
namespace App\Http\Controllers;
use App\Services\Helpers\HelperService;
class InitController extends Controller
{
protected $helperService;
public function __construct(HelperService $helperService)
{
$this->helperService = $helperService;
}
public function work($hash, $type)
{
return response()->json([
'answer' => $this->helperService->makeCodeUrl()
]);
}
}
虽然我可以理解这种特定代码模式的学习曲线,但我强烈建议您尽可能多地阅读有关服务提供商的信息。它将被证明在未来变得 非常 有价值,并且将使您能够 bootstrap 整个第 3 方库进入 Laravel 或 Lumen 安装。