ZF2 - 格式化路由
ZF2 - Formatting Routes
我通常像这样在 ZF2 中格式化我的路线:/name/to/route
现在我一直在对我的 api 路由做同样的事情,但是我发现我很难包含编码的 url 或数组等数据。
这是这样一条路线的例子:
http://example.com/api/register/access/code/c102dea422fa4bb6958d77a29d9873d2/http%3A%2F%2Frouter-local.example.com%2Fapi%2Fdirectory
以下代表正斜杠,因此导致路由不起作用:%3A%2F%2
我想我应该这样编码我的路线:
http://example.com/api/register/access/code/?access_code=c102dea422fa4bb6958d77a29d9873d2&route=http%3A%2F%example.com%2Fapi%2Fdirectory
如何配置 module.config 文件来处理这个问题?
目前 apigility:
'api.rpc.register-access-code' => array(
'type' => 'Segment',
'options' => array(
'route' => '/api/register/access/code/:access_code/:route',
'defaults' => array(
'controller' => 'Api\V1\Rpc\RegisterAccessCode\Controller',
'action' => 'registerAccessCode',
),
),
),
编辑
我通过执行以下操作对我的路由进行编码以包含 GET 参数:
$url = "http://example.com/api/register/access/code/";
$params = [
'access_code' => 'c102dea422fa4bb6958d77a29d9873d2',
'route' => 'http://example.com/api/directory'
];
$final = $url . "?" . http_build_query($params);
这给出了这个:
然而,由于 "The requested URL could not be matched by routing." 错误,这会中断。
由于对包含的 URL 中的斜线的解释,该路线无法识别。
问题可能与 URL 的格式和作为参数包含的方式有关?
您没有在分段路由选项中定义查询变量;只有路径。
无论路由配置如何,您都可以将 ?query=vars
附加到任何 url。 ZF2 的 url 助手应该为您编码查询变量,您只需要创建一个查询变量数组,并在创建 url.
时将其提供给助手函数
<?php echo $this->url('api.rpc.register-access-code', array(), array('query' => array(
'access_code' => 'c102dea422fa4bb6958d77a29d9873d2',
'route' => 'http://router-local.example.com/api/directory',
))); ?>`
在这种情况下,问题似乎与 htaccess 或 apache 有关。最简单的解决方案是使用以下方式对 url 进行编码:base64_encode($url) 可以在另一端对其进行解码。
我通常像这样在 ZF2 中格式化我的路线:/name/to/route
现在我一直在对我的 api 路由做同样的事情,但是我发现我很难包含编码的 url 或数组等数据。
这是这样一条路线的例子:
http://example.com/api/register/access/code/c102dea422fa4bb6958d77a29d9873d2/http%3A%2F%2Frouter-local.example.com%2Fapi%2Fdirectory
以下代表正斜杠,因此导致路由不起作用:%3A%2F%2
我想我应该这样编码我的路线:
http://example.com/api/register/access/code/?access_code=c102dea422fa4bb6958d77a29d9873d2&route=http%3A%2F%example.com%2Fapi%2Fdirectory
如何配置 module.config 文件来处理这个问题?
目前 apigility:
'api.rpc.register-access-code' => array(
'type' => 'Segment',
'options' => array(
'route' => '/api/register/access/code/:access_code/:route',
'defaults' => array(
'controller' => 'Api\V1\Rpc\RegisterAccessCode\Controller',
'action' => 'registerAccessCode',
),
),
),
编辑
我通过执行以下操作对我的路由进行编码以包含 GET 参数:
$url = "http://example.com/api/register/access/code/";
$params = [
'access_code' => 'c102dea422fa4bb6958d77a29d9873d2',
'route' => 'http://example.com/api/directory'
];
$final = $url . "?" . http_build_query($params);
这给出了这个:
然而,由于 "The requested URL could not be matched by routing." 错误,这会中断。
由于对包含的 URL 中的斜线的解释,该路线无法识别。
问题可能与 URL 的格式和作为参数包含的方式有关?
您没有在分段路由选项中定义查询变量;只有路径。
无论路由配置如何,您都可以将 ?query=vars
附加到任何 url。 ZF2 的 url 助手应该为您编码查询变量,您只需要创建一个查询变量数组,并在创建 url.
<?php echo $this->url('api.rpc.register-access-code', array(), array('query' => array(
'access_code' => 'c102dea422fa4bb6958d77a29d9873d2',
'route' => 'http://router-local.example.com/api/directory',
))); ?>`
在这种情况下,问题似乎与 htaccess 或 apache 有关。最简单的解决方案是使用以下方式对 url 进行编码:base64_encode($url) 可以在另一端对其进行解码。