【问题标题】:Zend Regex Route helpZend Regex 路由帮助
【发布时间】:2010-12-08 10:58:01
【问题描述】:

我正在尝试创建 Zend_Controller_Router_Route_Regex 路由来处理以下形式的 URL:

search?q=chicken/page=2 其中第一个正则表达式子模式是chicken,第二个是2。至于page=2的第二部分,如果是第一页,我想将其设为可选,即page=1。所以另一个 url 如search?q=chicken 也是有效的,相当于search?q=chicken/page=1

这是我的尝试,虽然没有任何成功,但为了让您更好地了解我正在尝试做的事情。


        $route = new Zend_Controller_Router_Route_Regex(             
            'search\?q=([a-zA-Z0-9]+)(?:/page=(\d+))',
            array( 
                'page'=> '1',
             'module' => 'default', 
             'controller' => 'search', 
             'action' => 'index' ), 
            array( 1 => 'query', 2 => 'page' ),
            'search?=%s/page=%d');
        $router->addRoute('search', $route);

这里的问题是我无法编写正确的正则表达式。

提前致谢。

编辑 #1

正如 MA4 指出的那样,正确的正则表达式是 'search\?q=([a-zA-Z0-9]+)(?:/page=(\d+))?'

达里尔指出了真正的问题。这里有更多信息可以让您深入了解。

我的搜索文本框和按钮

    <form action="/search" method="get">
            <input type="text" name="q" />
            <input type="submit" value="Search" />
    </form>

每次按下search 按钮时,我都会收到search?q=[text] 请求。如何强制它通过正则表达式匹配路由?

这是我想做的,但是代码不起作用

    if($this->getRequest()->getParam('query')){
        // redirect success
    } else {
        $url = "search?q=" . $this->_getParam('q');            
        $this->_redirect(route('search'), array('code' => 301 ));
    }

【问题讨论】:

    标签: regex zend-framework http-get zend-route


    【解决方案1】:

    /search?q=chicken/page=2 无法被 Zend Frameworks 的路由器解析。路由器只会看到/search

    路由器依赖于服务器提供的路径信息以及 ? 之后的任何内容。是查询字符串。

    您需要使用如下路径:

    /search/[word]        (default page 1)
    /search/[word]/[page] 
    

    在这种情况下,您的正则表达式会变得更简单。

    【讨论】:

    • 感谢您的输入,现在我知道为什么我的搜索按钮不起作用了。我编辑了我的原始问题以获取更多详细信息。
    • 我的答案仍然是答案。使用请求字符串 /search?q=chicken/page=2 无法执行您尝试的操作,这将导致路径信息为 /search 并且 q 的单个 $_GET 参数具有值 chicken/page=2 - Zend 框架路由器仅使用路径信息.
    【解决方案2】:

    通过在第二部分后面添加? 使第二部分成为可选:

    search\?q=([a-zA-Z0-9]+)(?:/page=(\d+))?
    

    【讨论】:

    • 感谢您的输入,额外的? 确实修复了正则表达式,但由于 Darryl 指出的原因,我的路由仍然无法正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 2011-08-17
    • 1970-01-01
    相关资源
    最近更新 更多