Autor | Zpráva | ||
---|---|---|---|
CarlosK Profil * |
#1 · Zasláno: 17. 6. 2012, 16:56:54
Dobrý den, pokouším se v nette udělat vícestránkovou registraci pomocí komponent. Každý formulář mám v jiném souboru a funguje jako komponenta. Formulář se v pořádku vykreslí, ale nefunguje submit tlačítko, které vyhazuje chybu: "The signal receiver component 'registerForm' is not found.".
RegistrationPresenter.php <?php class RegistrationPresenter extends BasePresenter { public function renderRegister($id) { $session = $this->presenter->session->getSection('register'); switch($id) { case null: /* http://localhost:8080/www/registration/register/ */ $this['registerForm'] = new RegisterForm($session); break; case 'druha': /* http://localhost:8080/www/registration/register/druha/ */ $this['registerForm'] = new RegisterDruhaForm($session); break; case 'treti': /* http://localhost:8080/www/registration/register/treti/ */ $this['registerForm'] = new RegisterTretiForm($session); break; default: throw new \Nette\Application\BadRequestException; break; } } } RegisterForm.php <?php use \Nette\Application\UI\Form, \Nette\Http\SessionSection; class RegisterForm extends Form { private $session; public function __construct(SessionSection $session) { $this->session = $session; parent::__construct(); $this->addText('Nick', 'Nick', null, 32) $this->addPassword('password', 'Heslo', null, 32) $this->addSubmit('submit', 'Pokračovat'); $this->onSuccess[] = callback($this, 'complete'); } public function complete(Form $form) { $this->session = $form->httpData; $this->presenter->redirect('Registration:register', 'druha'); } } RegisterDruhaForm.php <?php use \Nette\Application\UI\Form, \Nette\Http\SessionSection; class RegisterForm extends Form { private $session; public function __construct(SessionSection $session) { $this->session = $session; parent::__construct(); $this->addText('name', 'Jméno', null, 32) $this->addPassword('surname', 'Příjmení', null, 32) $this->addSubmit('submit', 'Pokračovat'); $this->onSuccess[] = callback($this, 'complete'); } public function complete(Form $form) { $this->session = $form->httpData; $this->presenter->redirect('Registration:register', 'treti'); } } register.latte {block #content} {control registerForm} {/block} |
||
Jan Tvrdík Profil |
CarlosK:
1) public function renderRegister($id) -> public function actionRegister($id)
2) Místo $form->httpData; používej $form->getValues(TRUE);
3) $this->session = $form->httpData; je blbost, takhle ty hodnoty do session rozhodě neuložíš.
|
||
CarlosK Profil * |
#3 · Zasláno: 17. 6. 2012, 17:58:09
Děkuji za odpověď. Hodnoty se mi do session ukládají (možná jste přehlédl že v konstruktoru předávám instanci Nette\Http\SessionSection). Chtěl jsem mít adresy ve tvaru /registration/register/ (První stránka) a /registration/register/druha/ (Druhá stránka) apod., ale nevím, jestli je takovýto nápad použitelný, protože se nezpracuje metoda complete v třídě RegisterForm.
|
||
Jan Tvrdík Profil |
CarlosK:
„Hodnoty se mi do session ukládají“ Nevěřím tomu. $this->session = $form->httpData; přiřadí do vlastnosti $session třídy RegisterForm hodnotu z $form->httpData , ale samotnou hodnotu session nezmění. To by tam muselo být něco jako $this->session->data = $form->httpData; .
„protože se nezpracuje metoda complete v třídě RegisterForm“ Přejmenoval jsi renderRegister na actionRegister ?Jinak ještě řádek $session = $this->presenter->session->getSection('register'); $session = $this->getSession('register'); |
||
CarlosK Profil * |
#5 · Zasláno: 17. 6. 2012, 18:19:00
Ano, vše už funguje jak má. Mockrát děkuji. Ještě bych měl jednu otázku. Je možné pomocí anotace povolit přístup k akci jen neregistrovaným uživatelům?
|
||
Jan Tvrdík Profil |
#6 · Zasláno: 17. 6. 2012, 18:30:08
CarlosK:
„Je možné pomocí anotace povolit přístup k akci jen neregistrovaným uživatelům?“ Nette nemá, jak rozlišit registrované a neregistrované uživatele. Může pouze rozlišit přihlášené a nepřihlášené. Standardně je implementováno pouze omezení přístupu pro přihlášené uživatele, ale můžeš si doimplementovat cokoliv, co potřebuješ. |
||
Časová prodleva: 13 let
|
0