記住,控制器負責處理路由邏輯。考慮到這一點,實際上沒有「助手控制器」這樣的東西,因爲沒有路線被映射到它,因此並不是傳統意義上的「控制器」。
你所描述的是所謂的「服務類」。任何合理複雜的應用程序都將使用服務類作爲一種手段,將控制器的所有業務邏輯抽象爲可重用的組件。
就你而言,服務類正是你所需要的。爲了建立你自己的,你需要做的幾件事情:
- 註冊一個ServiceProvider
- 添加實際的服務提供者類,並結合你的助手服務應用程序的IOC容器
- 創建助手服務
- Typehint的輔助服務在您的控制器的構造函數
- 運行
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;
});
}
}
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()
]);
}
}
雖然我可以理解,有一點與這個代碼特定模式的學習曲線,我會強烈建議閱讀儘可能多地瞭解服務提供商。它將被證明在將來變得非常有價值,並且將使您能夠將整個第三方庫引導到Laravel或Lumen安裝中。
謝謝你這麼好的回答 – SLI