我写了一个“Helper”控制器,我想在其他控制器中使用,但我做错了。 Lumen服务是我需要的吗?然后我就是不知道如何设置它。
我的主要课程:
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);
}
}
答案 0 :(得分:4)
请记住,Controller负责处理路由逻辑。考虑到这一点,实际上没有" Helper Controller"这样的东西,因为没有路由被映射到它,因此不是真正的"控制器&#34 ;在传统意义上。
您所描述的是什么称为"服务类"。任何合理复杂性的应用程序都将使用服务类作为将控制器中的所有业务逻辑抽象为可重用组件的手段。
在您的情况下,服务类正是您所需要的。为了建立自己的,你需要做一些事情:
composer dump-autoload
作为概念的快速证明,它最终会看起来像:
自举/ 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);
应用程序/提供者/ 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;
});
}
}
应用程序/服务\助手\ 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()
]);
}
}
虽然我可以理解这种特殊的代码模式有一点学习曲线,但我强烈建议尽可能多地阅读有关服务提供商的内容。它将证明在将来变得非常非常有价值,并且可以让您将整个第三方库引导到Laravel或Lumen安装中。