Změněná routa při odeslání formuláře přes AJAX
- admin@easyweb4u.cz
- Backer | 143
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)