2011-12-15 107 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