2011-05-10 37 views
0

有沒有簡單的方法如何使用視圖url helper生成URL格式的自定義參數(除了控制器和動作)將在「?」之後?使用URL視圖助手生成URL,傳遞參數後?

有例如:

<?php echo $this->url(array('controller' => "index", 'action' => "index", 'myParam' => "myValue")); ?>

這將產生:

domain.com/index/index/myParam/myValue

我想

domain.com?myParam=myValue

domain.com/{controller}/{action}?myParam=myValue

+3

你爲什麼要這樣?這個網址結構有什麼問題嗎? – 2011-05-10 09:47:49

回答

1

您可以使用正則表達式的路由的反向領域,例如:

$myroute = new Zend_Controller_Router_Route_Regex('\?myParam=(.*)', 
        array(1 => 'defaultValue', 'controller' => 'index', 'action' => 'index', 'module' => 'index'), 
        array(1 => 'myValue'), 
        '?myParam=%s' 
    ); 

    $wwwDomainRoute = new Zend_Controller_Router_Route_Hostname(
        'www.domain.com'); 

    $plainPathRoute = new Zend_Controller_Router_Route_Static(''); 

    //this default route is useful for the default routing 
    $router->addRoute('wwwroute', $wwwDomainRoute->chain($plainPathRoute)); 
    $router->addRoute('myroute', $wwwDomainRoute->chain($myroute)); 

,並在你看來只是使用:

<?php echo $this->url(array('controller' => "index", 'action' => "index", 'myParam' => "myValue"),'myroute'); ?> 

注:小心你的正則表達式...

+0

當然,OP的問題的字面解讀表明,他希望'url()'調用返回一個完整的URL與'domain.com'部分。根據這種解釋,您的答案正確包含了主機名路由。但我懷疑他的興趣是關於添加參數到查詢字符串。如果是這樣,那麼我們可以通過刪除主機名路由來簡化答案,並簡單地添加一個'baseUrl()'。也許我們應該澄清OP的意圖? – 2011-05-10 14:56:33

+0

你當然是對的,但是,這個解決方案更強大,我的迴應受到他將這些域放在他的示例請求中的事實的影響。他的問題更多地是關於如何格式化url(和參數),並且使用Zend_Router是解決方案。問候 – 2011-05-13 11:20:48

+0

當然,使用路線是要走的路。在我看來,它的膽量正如你用正則表達式路由所描述的那樣。我只是想知道是否添加主機名路由,雖然更強大,但看起來更復雜。無論如何,只是在頸部和分裂頭髮的痛苦。很好的答案。乾杯! ;-) – 2011-05-13 12:28:41