Změněná routa při odeslání formuláře přes AJAX

admin@easyweb4u.cz
Backer | 143
+
0
-

Ahoj, mám nastavené routování a všechny URL se přepisují jak mají. Když ale odešlu z presenteru Sortiment formulář přes AJAX, odesílá se na presenter Content a v Tracy vidím, že se změnila routa. Čím by to mohlo být?

Zde router:

<?php

declare(strict_types=1);

namespace App\Router;

use Nette;
use Nette\Application\Routers\RouteList;


final class RouterFactory
{
	use Nette\StaticClass;

	public static function createRouter(): RouteList
	{
			$router = new RouteList;

			$adminRouter = new RouteList('Admin');

			$adminRouter->addRoute('admin/<presenter>/<action>/<proc>');

			$adminRouter->addRoute('admin/<presenter>/<action>', [
							'presenter' => 'Sign',
							'action' => 'in',
			]);

			$router[] = $adminRouter;

			$frontRouter = new RouteList('Front'); // v common.neon mapping App\*\Presenters\*Presenter

			$frontRouter->addRoute('index.php', 'Homepage:default', $frontRouter::ONE_WAY);

			$frontRouter->addRoute('de', ['presenter' => 'Homepage',
					'action' => 'default',
					'lng' => 'de',
					'lang' => 3], $frontRouter::ONE_WAY);

			$frontRouter->addRoute('cs', ['presenter' => 'Homepage',
					'action' => 'default',
					'lng' => 'cs',
					'lang' => 1], $frontRouter::ONE_WAY);

			$frontRouter->addRoute('en', ['presenter' => 'Homepage',
					'action' => 'default',
					'lng' => 'en',
					'lang' => 2], $frontRouter::ONE_WAY);


			// detail
			$frontRouter->addRoute('<sort>[/<presenter>][/<action>]/<lang>/<id>/<categoryid>/<sortimentid>', [
					'presenter' => 'Sortiment',
					'action' => 'default'
					]);

			// category
			$frontRouter->addRoute('<category>[/<presenter>][/<action>]/<lang>/<id>/<categoryid>', [
					'presenter' => 'Sortiment',
					'action' => 'default'
					]);

			// content
			$frontRouter->addRoute('<section>[/<presenter>][/<action>]/<lang>/<id>', [
					'presenter' => 'Content',
					'action' => 'default'
					]);

			$frontRouter->addRoute('<presenter>[/<action>][/<lang>][/<id>]', [
					'presenter' => 'Homepage',
					'action' => 'default',
					'id' => 1
					]);

			$router[] = $frontRouter;

			return $router;
	}

}
?>

Aktuální stránka:
<sort>[/<presenter>][/<action>]/<lang>/<id>/<categoryid>/<sortimentid>

presenter = Sortiment
action = default

Front

Front:Sortiment:default
sort = sort-5
lang = 1
id = 21
categoryid = 1
sortimentid = 6

po odeslání formuláře se přepíše:
<section>[/<presenter>][/<action>]/<lang>/<id>

presenter = Content
action = default

Front

Front:Content:default
section = sortiment
lang = 1
id = 21
categoryid = 1
sortimentid = 6

Ještě formulář:

<?php
protected function createComponentCartForm() {

		$form = new UI\Form;

		$form->addProtection();

		$form->addHidden('sortimentid');

		$form->addHidden('categoryid');

		$form->setDefaults([
				'sortimentid' => $this->sortimentid,
				'categoryid' => $this->categoryid
		]);

		$form->addSubmit('send', $this->translate->getTranslateLayout($this->lang)[8])
						->setAttribute('class', 'submitProfil');

		$form->getElementPrototype()->class('ajax');

		$form->onSuccess[] = [$this, 'cartFormSucceeded'];

		return $form;
	}

	public function cartFormSucceeded(UI\Form $form, $values) {

		if (!$this->isAjax()) {

				$this->flashMessage('Error');
		} else {

			$this->flashMessage($values->sortimentid);
		}

		$this->redrawControl('flashes');
	}
?>

PS: i když ten AJAX zruším, přesměruje se to stejně.

a pak to vyhodí chybu

Nette\Application\UI\BadSignalException #403

The signal receiver component ‚cartForm‘ is not found.

Stejnou chybu to ovšem vyhodí i s AJAXem

PS2: když to narvu do BasePresenteru, tak ten formulář funguje, protože AJAX to přesměrování zastaví. S tímhle řešení bych se ale nechtěl spokojit.

Editoval admin@easyweb4u.cz (20. 5. 2020 13:25)