可以将 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} 将始终具有 non-digits 在其中,你可以只保留一条路线,但在你的控制器中进行条件处理。只需让 mainAction 执行类似...

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

然后创建这两个辅助函数并让它们 return 随心所欲。

$param 应该是你从那个路由参数得到的任何东西——/projects/{param}.

那应该为路由调用 idHelperAction,其中 $param 是所有数字,没有别的;否则,它应该调用 displayModeHelperAction。无论哪种方式,它都会将相同的 $param 发送到辅助函数,并且 returns 无论辅助函数是什么 returns —— 有效地将一个路由定义拆分为两个可能的操作。

当然,您可能需要在代码示例中添加一些上下文。如果所有函数都定义在同一个 class 中,您可能需要使用 $this->idHelperAction($param)self::idHelperAction($param)(与其他辅助操作相同),具体取决于它是否是静态的;或者告诉它在哪里可以找到这些函数,如果你把它们放在另一个 class 等等 - 所有正常的上下文要求。

您可能有一条路线 /projects,其中 returns 所有项目都是默认路线。 如果有查询参数like

/projects?displayMode=proposals

然后您可以应用过滤器。

在你的控制器中它看起来像这样

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

return $projects->get();

您也可以用同样的方式添加多个过滤器