[英]Lumen/Dingo/Laravel Getting to the correct controller
我知道這是一種罪過,但是我沒有任何代碼可顯示,只是我完全碰到了磚牆。 我的問題如下。
我有一個連接到Lumen / Dingo Api的客戶端。 對於所有請求,它都很棒。 例如:
我的路線:
$api->get('contact', 'ContactController@get');
與此結合的是,我有一個ContactController
,在里面有一個返回響應的get
函數。 沒問題
現在出現以下問題 :
我有一條執行任務的路線:
$api->get('task/{id}', 'TaskController@get');
問題在於,系統中並非所有Tasks
都是相同的。 根據任務Type
,我要執行特殊操作。 我正在考慮為每個Task
創建一個新的Controller
。 像MySpecialTask1Controller
, MySpecialTask2Controller
一樣,我從主TaskController
重定向到另一個控制器。
問題是1)我不知道如何執行此操作,以及2)我不知道這是否是執行此操作的最佳方法。
也許可以使用Dingo / Lumen提供的服務或其他工具解決此問題。 也許有人可以幫我解決這個問題。
我不會為每個任務而煩惱控制器,而寧願選擇一個處理該問題並在TaskController中調用的服務類。
服務類將具有一個公共handle()方法(或為其找到一個更好的名稱),該方法將接受1個參數(根據您的描述)。 該參數將是您需要執行的任務的類型。
我將有另一個受保護的方法,該方法將根據您提供的類型提供一個查找表,它將調用相應的類並在該類中執行該方法。
這也稱為多態性。
代碼示例:
class TaskController extends Controller
{
protected $taskService;
public __construct(TaskService $taskService)
{
$this->taskService = $taskService;
}
public function someMethod()
{
// determine the type of task and then
$this->taskService->handle($type)
}
}
class TaskService
{
public function handle($type)
{
$this->doTask($type);
}
protected function doTask($type)
{
// the lookup table
$tasks = [
'crazy' => new CrazyTask(),
'insane' => new InsaneTask(),
'hard' => new HardTask(),
'easy' => new EasyTasK()
];
foreach($tasks as $taskType => $task)
{
if($taskType === $type) {
return $task->do();
}
}
}
}
這段代碼應該使您了解如何使用此設計模式解決問題(我現在無法想到這個名稱)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.