首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ZF2 -格式化路由

ZF2 -格式化路由
EN

Stack Overflow用户
提问于 2015-04-23 23:44:21
回答 2查看 78关注 0票数 0

我通常在ZF2中格式化我的路由,如:/name/to/name

现在,我在api路由上做了同样的事情,但是我发现我很难包含数据,比如编码的urls或数组。

下面是这样一条路线的一个例子:

代码语言:javascript
复制
http://example.com/api/register/access/code/c102dea422fa4bb6958d77a29d9873d2/http%3A%2F%2Frouter-local.example.com%2Fapi%2Fdirectory

下面表示正斜杠,从而导致路由不工作:%3A%2F%2

我想我应该把我的路线编码成这样:

代码语言:javascript
复制
http://example.com/api/register/access/code/?access_code=c102dea422fa4bb6958d77a29d9873d2&route=http%3A%2F%example.com%2Fapi%2Fdirectory

如何配置module.config文件来处理这个问题?

目前,它被设置为这样的智性:

代码语言:javascript
复制
'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参数:

代码语言:javascript
复制
    $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是如何格式化并包含为参数的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-26 12:55:24

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

票数 0
EN

Stack Overflow用户

发布于 2015-04-24 08:44:31

在段路由选项中不定义查询变量,只定义路径。

您可以将?query=vars附加到任何url中,而不管路由配置如何。ZF2的url帮助程序应该为您编码查询vars,您只需创建一个查询vars数组,并在创建url时将其交给助手函数。

代码语言:javascript
复制
<?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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29836298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档