我通常在ZF2中格式化我的路由,如:/name/to/name
现在,我在api路由上做了同样的事情,但是我发现我很难包含数据,比如编码的urls或数组。
下面是这样一条路线的一个例子:
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文件来处理这个问题?
目前,它被设置为这样的智性:
'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);这意味着:
code=c102dea422fa4bb6958d77a29d9873d2&route=http%3A%2F%2Fexample.com%2Fapi%2Fdirectory
但是,由于“请求的URL无法通过路由匹配”而中断。错误。
由于对包含的URL中的斜杠的解释,该路径是未知的。
也许问题在于URL是如何格式化并包含为参数的?
发布于 2015-04-26 12:55:24
在这种情况下,问题似乎与htaccess或apache有关。最简单的解决方案是使用: base64_encode($url)对url进行编码,它可以在另一端去编码。
发布于 2015-04-24 08:44:31
在段路由选项中不定义查询变量,只定义路径。
您可以将?query=vars附加到任何url中,而不管路由配置如何。ZF2的url帮助程序应该为您编码查询vars,您只需创建一个查询vars数组,并在创建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',
))); ?>`https://stackoverflow.com/questions/29836298
复制相似问题