Leo*_*los 4 php routes zend-framework3
在Zend Framework 3中,是否可以根据URL是否包含查询字符串来路由到控制器?
例如,我有以下两个URL:
/users
/users?name=Bob
Run Code Online (Sandbox Code Playgroud)
我想第一条路线叫a UsersController和第二条路线叫a NameController。
这可能吗?
我的评论变成了答案。所以,你去。
下次,请确保遵循“ 如何提问”。
请阅读路由器上的ZF3文档,以及RFC 3986第3章-语法组件,其中显示了什么是路径和什么是查询。
以下是两个示例URI及其组成部分:
Run Code Online (Sandbox Code Playgroud)foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/\_________/ \_________/ \__/ | | | | | scheme authority path query fragment | _____________________|__ / \ / \ urn:example:animal:ferret:nose
ZF3路由配置通常是路径上的配置。(几乎每个通用框架都是这样。)是的,变量可以是路径的一部分。因此,它们是在路由配置中配置的。框架路由的高级配置通常还允许对方案和权限进行更改/要求。
不是路由配置的一部分是“查询”和“片段”部分。
如果您想做某事,例如捕获“名称”键/值对并进行相应的路由,则必须在路径上创建“捕捉器”(或该名称的任何名称)并确定重定向自己。
例如,您可以做这样的回答。如果您的控制器实例扩展了默认的Zend Framework AbstractActionController类,那么您应该有可用的forward插件。从文档:
转发返回调度请求的控制器的结果;由开发人员决定如何处理这些结果。一种建议是将它们汇总为调用控制器的任何返回值。
举个例子:
foo://example.com:8042/over/there?name=ferret#nose
\_/ \______________/\_________/ \_________/ \__/
| | | | |
scheme authority path query fragment
| _____________________|__
/ \ / \
urn:example:animal:ferret:nose
Run Code Online (Sandbox Code Playgroud)
当然,您可以立即将其退回。
另一个选择是redirect插件(相同的链接)。
$foo = $this->forward()->dispatch('foo', ['action' => 'process']);
return [
'somekey' => $somevalue,
'foo' => $foo,
];
Run Code Online (Sandbox Code Playgroud)
有了这些,您可以执行以下操作:
return $this->redirect()->toRoute('login-success');
Run Code Online (Sandbox Code Playgroud)
您重定向到路由名称(即配置的路径)的位置