我通常在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);
这给出了这个:
然而,这由于&#34而中断;请求的URL无法通过路由匹配。"错误。
由于对包含的网址中的斜杠进行了解释,路由无法识别。
也许问题在于如何格式化URL并将其作为参数包含在内?
答案 0 :(得分:1)
您不会在segment route选项中定义查询变量;只有路径。
无论路由配置如何,您都可以将?query=vars
附加到任何网址。 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',
))); ?>`
答案 1 :(得分:0)
在这种情况下,问题似乎与htaccess或apache有关。最简单的解决方案是使用以下命令对url进行编码:base64_encode($ url),可以在另一端解码。