0

我通常像这样在 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);

这给出了这个:

http://example.com/api/register/access/code/?access_code=c102dea422fa4bb6958d77a29d9873d2&route=http%3A%2F%2Fexample.com%2Fapi%2Fdirectory

但是,由于“请求的 URL 无法通过路由匹配”而中断。错误。

由于包含 URL 中的斜杠的解释,该路由无法识别。

也许问题与 URL 的格式和作为参数的包含方式有关?

4

2 回答 2

1

您没有在分段路线选项中定义查询变量;只有路径。

?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',
))); ?>`
于 2015-04-24T08:44:31.243 回答
0

在这种情况下,问题似乎与 htaccess 或 apache 有关。最简单的解决方案是使用 base64_encode($url) 对 url 进行编码,它可以在另一端进行解码。

于 2015-04-26T12:55:24.687 回答