流明共享控制器

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 正是您所需要的。为了构建你自己的,你需要做一些事情:

  1. 注册一个ServiceProvider
  2. 添加实际的服务提供者class,并将您的助手服务绑定到应用程序的 IOC 容器
  3. 创建您的助手服务
  4. 在您的控制器的构造函数中键入帮助程序服务
  5. 运行 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 安装。