在Zend Framework 3中,我具有以下细分路线:
'route' => '/search/:query'
在控制器中,我得到这样的查询:
$query = $this->params()->fromRoute('query');
我注意到这不适用于包含空格的查询。对于以下两个URL,该查询均以foo+bar
的形式检索。
https://www.example.com/search/foo+bar
https://www.example.com/search/foo%2Bbar
但是,第一个查询应解释为foo bar
,而不是foo+bar
。
目前,我们正在使用一种直接解析$_SERVER['REQUEST_URI']
的变通方法:
$queryEncoded = explode('/', $_SERVER['REQUEST_URI'])[2];
$query = urldecode($queryEncoded);
在这种情况下,Zend Framework 3是否提供了一种本机方法来正确检索query
参数?
答案 0 :(得分:0)
您正在混合Route参数和线段。
下面是2条路线,1条文字,1条路段的示例:
'router' => [
'routes' => [
'users' => [
'type' => Literal::class,
'may_terminate' => true,
'options' => [
'route' => '/users',
'defaults' => [
'controller' => UserIndexController::class,
'action' => 'index',
],
],
'child_routes' => [
'view' => [
'type' => Segment::class,
'may_terminate' => true,
'options' => [
'route' => '/:id',
'constraints' => [
'id' => '[0-9]+',
],
'defaults' => [
'controller' => UserViewController::class,
'action' => 'view',
],
],
],
// more routes
],
// more routes
],
],
],
所以这里有路线:
/users
(文字)/:id
后者是一个段。它也有一些限制:它必须是任意数量的正数。
因此,我们具有ID的用户(索引)和特定视图(视图)。示例网址:
请注意,由于它是已定义路由的一部分,并且是在约束中定义的,因此您将在像这样的控制器中获得这些示例中给出的id
:
$id = $this->params()->fromRoute('id', null);
这为您提供了在路由中传递的id
或null
值。
您要在问题中尝试的是针对条件视图或搜索的内容。您需要参数。您想要:
这为您提供了一个key
“角色”和一个value
“管理员”。在上下文中,您希望显示所有具有admin角色的用户。
您未在路由中定义键/值类型。根本没有必要。 Zend Router确保使用以下命令为请求中准备的所有内容进行准备:
$queryParams = $this->params()->fromQuery('role', null);
请注意将fromRoute
更改为fromQuery
! ?
之后的所有内容均为查询内容。 Zend Router通过密钥名称为您准备使用这些文件。 role
。
查询键/值的准备还考虑了空格。如果您具有以下网址:
您将得到以下结果:
$foo = $this->params()->fromQuery('foo', null); // "space bar"
$role = $this->params()->fromQuery('role', null'); // "admin"
$test = $this->params()->fromQuery('test', null'); // null