可以将 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
的两种不同方法(分别是 show
和index
).
感谢您的帮助! :)
我不确定路由定义的特定 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();
您也可以用同样的方式添加多个过滤器
我已经有一个带有 URI /projects/{id}
的 GET 路由,它显示具有给定 ID 的项目的信息。我还有一个 GET 索引路由(/projects
),它显示了我所有的项目。
我的问题是我目前正在尝试创建不同的索引(例如,只显示分配给我的项目 [例如 /projects/mines
] 或等待管理员批准的项目 [例如/projects/proposals
],还有其他显示)。
所以我想知道我是否可以有两条 GET 路由 /projects/{id}
和 /projects/{display_mode}
这将调用我的 ProjectController
的两种不同方法(分别是 show
和index
).
感谢您的帮助! :)
我不确定路由定义的特定 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();
您也可以用同样的方式添加多个过滤器