2009-07-17 60 views
0

我們正在使用Zend路由器,它似乎覆蓋由窗體發送的參數。到達控制器的唯一參數是來自Url的參數。Zend路由器覆蓋從形式的後變量

有誰知道爲什麼會發生這種情況?

下面是配置文件:

; Routing config 

routes.groups.route = groups/:group/:type/:idPost/:postUrl/:page 
routes.groups.defaults.controller = groups 
routes.groups.defaults.action = index 
routes.groups.defaults.type = main 
routes.groups.defaults.idPost = 
routes.groups.defaults.postUrl = 
routes.groups.defaults.page = 1 

而且形式:

<form action="<?= $this->_view->baseUrl ?>/groups/<?= $group['groupUrl'] ?>/deletepost/" method="post"> 
<input type="hidden" name="formUrl" value="<?=$formUrl ?> /> 
    ... 
</form> 

控制器:

public function deletepostAction() { 
    $params = $this->getRequest()->getParams(); 
    print_r($params); 
    die; 
} 

...輸出:

Array 
(
    [group] => dandy-handwriting 
    [type] => deletepost 
    [idPost] => 
    [controller] => groups 
    [action] => index 
    [postUrl] => 
    [idGroup] => 1 
    [lang] => en 
) 

注意「formUrl」缺失,它只有來自路由器的參數。

+0

你能給你的代碼嗎?你在路由器中擁有什麼,以及你是如何發送你的表單非常重要。 – 2009-07-17 10:57:24

+0

好的,我編輯了這個問題並添加了代碼 – lasse 2009-07-17 11:16:42

回答

3

您可以使用控制器中的請求對象來訪問您的數據。請求對象 $ request = $ this-> getRequest();

檢索POST數據(如果您的表單是通過POST提交的): $ post = $ request-> getPost();

檢索GET數據(如果您的表單是通過GET提交的): $ get = $ request-> getQuery();

在通過setParam(),GET參數和POST參數設置的訂單用戶參數中檢索參數: $ params = $ request-> getParams();

如果您使用getParams()獲取數據,路由器設置的參數將覆蓋您的POST數據。

因此,如果您只想從窗體中獲取數據,請使用getPost()或getQuery()方法。

1

也許你正在發送你的表單數據爲GET,並配置Zend_Router來重寫URL(不需要其他的get參數)。

在這種情況下,解決方案是使用POST發送表單數據或更改Zend_Router中的路由。

你的代碼將有助於確定你確切的問題是什麼。