簡體   English   中英

可以將 2 種不同類型的參數傳遞給 Laravel 控制器嗎?

[英]It is possible to pass 2 differents types of parameters to a Laravel controller?

我已經有一個帶有 URI /projects/{id}的 GET 路由,它顯示具有給定 id 的項目的信息。 我還有一個 GET 索引路由 ( /projects ),它顯示了我的所有項目。

我的問題是我目前嘗試創建不同的索引(例如,一個只顯示我被分配的項目[例如在/projects/mines ],或者正在等待管理員批准的項目[例如在/projects/proposals ],還有一些顯示)。

所以我想知道我是否可以有兩個 GET 路由/projects/{id}/projects/{display_mode} ,它們將調用我的ProjectController兩個不同方法(分別是showindex )。

謝謝你的幫助! :)

我不確定路由定義的特定 Laravel 選項(抱歉!),但是如果{id}始終是整數並且{display_mode}始終包含非數字,您可以只保留一條路由,但是在控制器中進行條件處理。 只需讓 mainAction 做一些類似的事情......

return preg_match('/^\d+$/', $param) ? idHelperAction($param) : displayModeHelperAction($param);

然后創建這兩個輔助函數並讓它們返回您想要的任何內容。

$param應該是您從該路由參數中獲得的任何內容 -- /projects/{param}

這應該調用 idHelperAction 用於$param是數字而沒有其他內容的路由; 否則,它應該調用 displayModeHelperAction。 無論哪種方式,它都會向輔助函數發送相同的$param並返回輔助函數返回的任何內容——有效地將一個路由定義拆分為兩個可能的操作。

當然,您可能需要在代碼示例中添加一些上下文。 如果函數都定義在同一個類中,您可能需要使用$this->idHelperAction($param)self::idHelperAction($param) (與其他輔助操作相同),具體取決於它是否是靜態的或不; 或者告訴它在哪里可以找到函數,如果你把它們放在另一個類中,等等——所有正常的上下文要求。

您可能有一個路由/projects默認返回所有項目。 如果有像這樣的查詢參數

/projects?displayMode=proposals

然后你可以應用過濾器。

在您的控制器中,它看起來像這樣

$projects = Project::query();
if ($request->query('displayMode') == 'proposals')
    $projects->where('pending', true)

return $projects->get();

您也可以以相同的方式添加多個過濾器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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