nefunkční odeslání formuláře přes 2 komponenty
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- sin
- Člen | 82
Ahoj,
kdyz si vykresluju formular (viz níže) tak se mi vykresli ale nejde odeslat…
je tam action=""
Nevíte prosim někdo co s tim?
Dík Sin
template:
<?php
{control loginForm}
?>
Presenter:
<?php
public function createComponentLoginForm()
{
return new AuthControlForm();
}
?>
a pak mam v komponente AuthControlForm:
<?php
public function render()
{
$form = new AppForm();
$form->addText('username', 'Username:');
$form->addSubmit('login', 'Login');
$form->onSubmit[] = array($this, 'loginFormSubmitted');
echo $form;
}
public function loginFormSubmitted($form){
$data = $form->getValues();
foreach ($data as $value)
echo $value;
?>
- redhead
- Člen | 1313
- formulář nemáš připojen ke komponentě, čili neví jak spravit odkaz ($form = new AppForm($this, „meno“)
- v render metodě je už pozdě vytvářet form, protože formulář je validován před tím, čili si udělej rovnou z toho formu komponentu (v té komponentě)
public function createComponentLoginForm()
{
$form = new AppForm(); //nebo AppForm($this, "loginForm") a pak už není nutný return $form; na konci
$form->addText('username', 'Username:');
$form->addSubmit('login', 'Login');
$form->onSubmit[] = array($this, 'loginFormSubmitted');
return $form;
}
public function render()
{
echo $this['loginForm'];
}
- sin
- Člen | 82
zkusil jsem to predelat na
<?php
public function createComponentLoginForm()
{
$form = new AppForm($this, "loginForm");
$form->addText('username', 'Username:');
$form->addSubmit('login', 'Login');
$form->onSubmit[] = array($this, 'loginFormSubmitted');
echo $form;
}
public function loginFormSubmitted($form){
$data = $form->getValues();
foreach ($data as $value)
echo $value;
}
public function render(){
$this['loginForm'];
}
?>
ale hazi mi to chybu: Nested forms are forbidden.
- Ondřej Mirtes
- Člen | 1536
Pokud chceš mít čistě jen formulář jako komponentu, je lepší ho podědit od AppForm a přidávat jeho prvky v konstruktoru – nemusíš psát další továrničku a starat se o renderování.