redirect – co dělám špatně?
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- tatyalien
- Člen | 239
Dobrý den,
nevím proč, ale v určité fázi mě nefunguje redirect. Presenter a šablonu
mám nastavenou na: Homepage:potvrzeni, kde se po kliknutí na
tlačítko chci přesměrovat na Homepage:default, ale toto se
mě nedaří. Pokud ale mám redirect za „try“ tak to proběhne…
<?php
protected function createComponentPotvrzeniForm($name)
{
$form = new AppForm($this, $name);
$form->getElementPrototype()->id = 'frm-potvrzeni';
// napojení containeru
$form['potvrzeni'] = new PotvrzeniContainer;
$form['potvrzeni']['btn_ano']->onClick[] = callback($this, 'saveNewClicked');
$form['potvrzeni']['btn_ne']->onClick[] = callback($this, 'zpetClicked');
}
public function saveNewClicked(\Nette\Forms\SubmitButton $button) {
// vytáhnu si uložené data ze sessionu
$namespace = Environment::getSession('rkl_test');
$values = $namespace->defaults;
// zde budu ukládat dat do DB
try {
/*
Zde ukládám do DB, vše se uloží správně, i když toto zde nemám, tak to nefunguje (redirect)
*/
$this->flashMessage("uloženo new...");
$this->redirect(':homepage:default');
} catch (Exception $e) {
//$this->flashMessage($e->getMessage());
$button->getForm()->addError($e->getMessage());
}
// pokud to mám ale zde, redirect se provede
// $this->redirect(':homepage:default');
}
?>
Container tlačítek:
<?php
class PotvrzeniContainer extends Nette\Forms\FormContainer
{
public function __construct(IComponentContainer $parent = NULL, $name = NULL)
{
parent::__construct($parent, $name);
$this->monitor('Nette\Forms\Form');
}
protected function attached($obj)
{
parent::attached($obj);
if (!$obj instanceof Nette\Forms\FormContainer) {
return ;
}
$this->getForm()->getElementPrototype()->setNovalidate('novalidate');
$this->currentGroup = $this->getForm()->addGroup("Potvrzení")->setOption('embedNext', true);
$this->addSubmit('btn_ano', 'Ano')
->setValidationScope(false)
->setHtmlId("btn_ano");
$this->addSubmit('btn_ne', 'Ne')
->setValidationScope(false)
->setHtmlId("btn_ne");
}
}
?>
- Petr Mašát
- Člen | 101
Hoj,
ten redirect ti nefunguje, protože vyvolává výjimku a je v bloku try/catch.
Více viz. třeba tohle vlákno na fóru: https://forum.nette.org/…ci-bloku-try
pm*