Presmerovanie po odoslani Formu kvoli indexom v $_GET pri pouziti MultiSelectu?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
BillGates
Člen | 3
+
0
-

Zdravim,

mam jednu otazku, neviem ci je chyba v mojej implementacii alebo je to defaultne spravanie Nette.

Mam klasicky Form (sample kod)

use Nette\Forms\Form;

final class FilterForm extends Form
{

	public function __construct($name, $id, $action = NULL)
	{
		parent::__construct();

		$this->setMethod('GET');

		$items = array(
		 'CZ' => 'Česká Republika',
		 'SK' => 'Slovensko',
		 'GB' => 'Velká Británie',);
		$this->addSelect('country', 'Země:')->setItems($items, FALSE);
		$this->addMultiSelect('options', 'Možnosti:', $items);
		$this->addSubmit('submit', 'Odeslat');

		dump($this->getValues());
	}

}

ktory pridavam do templatu cez

$this->template->filterForm = new \FilterForm('test', 1);

V sablone ho vykreslujem takto:

{$filterForm->render('begin')}
<table>
	<tr class="required">
		<th>{$filterForm['country']->label}</th>
		<td>{$filterForm['country']->control}</td>
	</tr>
	<tr class="required">
		<th>{$filterForm['options']->label}</th>
		<td>{$filterForm['options']->control}</td>
	</tr>
	<tr class="required">
		<th></th>
		<td>{$filterForm['submit']->control}</td>
	</tr>
</table>
{$filterForm->render('end')}

Formular sa normalne odosle ako by sa mal, aj odoslane hodnoty su dostupne. Akurat je tu jeden problem. Po odoslani formulara dochadza najprv k 301 presmerovaniu a az potom ku klasickemu vykresleniu stranky (HTTP 200).

Odoslany formular ma query string
country=Slovensko&options%5B%5D=CZ&options%5B%5D=SK&_submit=Odeslat
, ktory sa potom redirectuje cez 301 na
country=Slovensko&options%5B0%5D=CZ&options%5B1%5D=SK&_submit=Odeslat
klasicky cez 301 Location hlavicku.

Cize dochadza k pridaniu numerickeho indexu do $_GET pola options (povodna hodnota je options[]=SK&options[]=CZ, presmerovava na options[0]=SK&options[1]=CZ).

Je toto spravanie sposobene priamo Nette alebo je to nejaka chyba u mna? Idealne by bolo, keby tam tie indexy neboli, alebo potom aby sa generovali priamo pri odoslani formulara (co sa asi IMHO tak lahko neda). Lebo takto je tam zbytocny redirect a sposobuje mi to problemy za istych okolnosti.

Ide o Nette 2.1.0.

Dakujem za odpovede.

petr.pavel
Člen | 535
+
0
-

Ukaž ten přesměrovávací kód, prosím. A proč ti to vadí? Trochu mi to zavání :-)

BillGates
Člen | 3
+
0
-

Server side kod nemam, lebo neviem kde dochadza k tomu presmerovaniu (to je prave ten problem, ze neviem kde a preco k tomu dochadza).

Client side kod – Chrome konzola:

Request URL: http://xxx/?country=%C4%8Cesk%C3%A1+Republika&options%5B%5D=CZ&options%5B%5D=SK&_submit=Odeslat
Request Method: GET
Status Code: 301 OK

Response headers
Location: http://xxx/?country=%C4%8Cesk%C3%A1+Republika&options%5B0%5D=CZ&options%5B1%5D=SK&_submit=Odeslat

a potom po presmerovani

Request URL: http://xxx/?country=%C4%8Cesk%C3%A1+Republika&options%5B0%5D=CZ&options%5B1%5D=SK&_submit=Odeslat
Request Method: GET
Status Code: 200 OK

Problem je to jednak mozno principialny, nemalo by IMHO k tomu dochadzat, vytazuje to server (2 requesty miesto jedneho) a je to pre mna mierny problem aj z hladiska SEO.

David Matějka
Moderator | 6445
+
0
-

imho to zpusobuju automaticka kanonizace url, muzes vypnout nastavenim teto property na false

BillGates
Člen | 3
+
0
-

Aplikoval som fix a funguje to, dakujem pekne