Zend Avoid отправить значение кнопки в параметрах GET в URL - PullRequest
3 голосов
/ 10 сентября 2010

У меня есть форма, созданная с помощью Zend_Form, с методом = GET, используемым для поиска записей с элементами, как показано ниже:

[форма] имя пользователя [input type = "text" name = "uname"] [input type = "submit" value = "Search" name = "search"] [/ form]

После отправки формы все параметры GET вместе со значением кнопки submit появляются в URL.

http://mysite.com/users/search?uname=abc&search=Search

Как избежать появления значения кнопки отправки в URL?такое пользовательская маршрутизация?

Ответы [ 5 ]

4 голосов
/ 18 января 2014

Когда вы создаете свой элемент, вы можете просто удалить атрибут имени, который был автоматически установлен при создании

$submit = new Zend_Form_Element_Submit('search')->setAttrib('name', '');

или внутри Zend_Form

// Input element
$submit = $this->createElement('submit', 'search')->setAttrib('name', '');

// Or Button element
$submit = $this->createElement('button', 'search')->setAttribs(array
(
    'name' => '', 'type' => 'submit',
);
3 голосов
/ 10 сентября 2010

Когда форма отправляется, все ее элементы с их именами и значениями становятся частью запроса GET / POST.

Итак, если вы не хотите, чтобы элемент появлялся в вашем GET-запросе, все, что вам нужно сделать, это создать этот элемент без имени. Вероятно, это не лучший подход, но поскольку мы говорим об элементе submit, я думаю, это не имеет большого значения.

Глядя на Zend_View_Helper_FormSubmit помощник, вы можете видеть, что он создает элемент 'submit' и задает его имя. Таким образом, возможным решением было бы создать свой собственный помощник вида и использовать его для рендеринга элемента submit вместо помощника по умолчанию.

Вы можете установить пользовательский помощник с помощью

$element->setAttribs( array('helper' => 'My_Helper_FormSubmit') );
1 голос
/ 03 декабря 2015

Вы можете удалить атрибут имени для кнопки отправки в JavaScript. Пример jQuery:

$('input[name="submit"]').removeAttr('name');
1 голос
/ 23 июля 2013

Затем создайте свой собственный класс элемента формы и удалите атрибут name из элемента с помощью preg_replace. Прелесть его в том, что он не будет мешать другим декораторам.

Так вот как то так:

class My_Button extends Zend_Form_Element_Submit
{
    public function render()
    {
        return preg_replace('/(<input.*?)( name="[^"]*")([^>]*>)/', "$1$3", parent::render(), 1);
    }
}
0 голосов
/ 10 сентября 2010

В контроллере, представляющем действие формы, перенаправьте его на другой (или тот же контроллер), включающий только соответствующие параметры.

псевдокод:

$params = $this->getRequest()->getParams();
if isset($params['search'])
  unset($params['search']);
  return $this->_helper->Redirector->setGotoSimple('thisAction', null, null, $params);

handle form here

Это в основном та же идея, что и Post / Redirect / Get , за исключением того, что вы хотите изменить запрос (путем сброса параметра) между различными этапами вместо того, чтобы делать что-то постоянное (изображения на эта вики-страница показывает вставку данных в базу данных).

Если бы я был на вашем месте, я бы оставил это внутри. ИМО, это не стоит дополнительного запроса к веб-серверу.

...