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);

这给出了这个:

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

然而,由于 "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) 可以在另一端对其进行解码。