2011-12-15 108 views
0

我遇到了zendframework路由和参数的问题。路由和URL参数 - ZendFramework

我有我的看法页面语言选择:

<div class="language-chooser"> 
    <? 
    $params = Zend_Controller_Front::getInstance()->getRequest()->getParams(); 
    unset($params['module']); 
    unset($params['controller']); 
    unset($params['action']); 
    ?> 
    <a href="<?= $this->url(array_merge($params, array('lang' => 'pt'))); ?>"><img src="<?= $this->baseUrl('/images/flags/br.png'); ?>" alt="" /></a> 
    <a href="<?= $this->url(array_merge($params, array('lang' => 'en'))); ?>"><img src="<?= $this->baseUrl('/images/flags/us.png'); ?>" alt="" /> </a> 
</div> 

它工作正常,没有线路。访问本地主机/应用/接触,我得到的链接是否正确例:本地主机/应用/联系人/索引/郎/ EN

但是,如果我添加路由

protected function _initRotas() { 
    $router = Zend_Controller_Front::getInstance()->getRouter(); 
    $route = new Zend_Controller_Router_Route(
        '/contact', 
        array(
         'module' => 'default', 
         'controller' => 'contact', 
         'action' => 'index' 
        ) 
    ); 
    $router->addRoute('contact', $route); 
} 

我得到没有郎链接PARAM。例如:localhost/app/contact/

我该如何解决这个问题?

由于

+0

阅读此http:// stackoverflow.com/questions/8345018/zend-reverse-matching-of-ro utes-returns-current-url/ – emaillenin 2011-12-15 06:48:22

回答

2

第一个例子是基于缺省路由,它看起来像:module/:controller/:action/* 通知的*在路线的终点;它定义了url可以包含额外的键/值对。

为了让您的联系人发送工作,你既可以使用

$route = new Zend_Controller_Router_Route(
    '/contact/:lang', 
    array(
     'module' => 'default', 
     'controller' => 'contact', 
     'action' => 'index' 
    ) 
); 

这将使URL看起来像/contact/pt。或者你可以使用:

$route = new Zend_Controller_Router_Route(
    '/contact/*', 
    array(
     'module' => 'default', 
     'controller' => 'contact', 
     'action' => 'index' 
    ) 
); 

这将导致在/contact/index/lang/pt

+0

“注意路线末尾的`*`;它定义了url可以包含额外的键/值对。“ =>这让我疯狂。我需要这个明星...... THX! – LittleBigDev 2012-10-22 03:20:15

0

你也可以使用此代码:

$Router = Zend_Controller_Front::getInstance()->getRouter(); 
$Router->addRoute('move', new Zend_Controller_Router_Route(
    '/contact/:lang', 
    array(
     'module' => 'default', 
     'controller' => 'contact', 
     'action' => 'index' 
    ), 
    array(
     'lang' => '[a-z]+' 
    ) 
)); 

Zend_Controller_Front

Zend_Controller_Router_Route