ZF2 - 格式化路由

时间:2015-04-23 23:44:21

标签: zend-framework2 apigility

我通常在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

然而,这由于&#34而中断;请求的URL无法通过路由匹配。"错误。

由于对包含的网址中的斜杠进行了解释,路由无法识别。

也许问题在于如何格式化URL并将其作为参数包含在内?

2 个答案:

答案 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),可以在另一端解码。