2009-07-17 3 views
0

Мы используем Zend Router, и кажется, что он перезаписывает параметры, которые отправляются формами. Единственными параметрами, которые поступают в контроллер, являются параметры из Url.Zend Router перезаписывает переменные post из формы

Кто-нибудь знает, почему это происходит?

Вот конфигурационный файл:

; 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

Не могли бы вы дать свой код? Очень важно, что у вас на вашем маршрутизаторе и как вы отправили свои формы. –

+0

Хорошо, я отредактировал вопрос и добавил код – lasse

+0

Можете ли вы также добавить, как вы пытаетесь увидеть параметры в контроллере? –

ответ

3

Вы можете использовать объект request в своем контроллере для доступа к вашим данным.

Извлечь объект запроса: $ request = $ this-> getRequest();

Извлечь данные POST (если ваша форма отправлена ​​через POST): $ post = $ request-> getPost();

Получить данные GET (если ваша форма отправлена ​​через GET): $ get = $ request-> getQuery();

Загрузить параметр в пользовательских параметрах заказа, заданных параметрами setParam(), GET и POST: $ params = $ request-> getParams();

Если вы извлекаете данные с помощью getParams(), параметры, заданные маршрутизатором, будут переопределять ваши данные POST.

Так что, если вы хотите только получить данные из своей формы, используйте метод getPost() или getQuery().

+0

Спасибо за ответ. Мы хотели бы отправить данные формы как POST, но для таких действий, как addComment и addPost. Вы знаете, есть ли способ заставить маршрутизатор отправлять параметры GET? – lasse

+0

Маршрутизатор не отправляет параметры через GET или POST. Он просто вводит их в запрос, используя семейство методов setParam *. Flo совершенно прав, вам просто нужно получить только параметры POST из объекта запроса при обработке вашей формы, и все будет замечательно. – jason

+0

Спасибо, что пояснил Джейсон. Еще раз спасибо, Фло, за ответ. Теперь, когда я читаю его снова, это имеет большой смысл. Это было поздно в пятницу, и мой мозг не следовал хорошо. – lasse

1

Возможно, вы отправляете данные своей формы как GET и настроили Zend_Router на переписывание URL-адреса (без принятия других параметров получения).

В этом случае решение должно отправить данные формы с помощью POST или изменить маршруты в Zend_Router.

Ваш код поможет определить причину проблемы.

Смежные вопросы