簡體   English   中英

流明/丁戈/拉爾韋爾到達正確的控制器

[英]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 MySpecialTask1ControllerMySpecialTask2Controller一樣,我從主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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM