Formulář v komponentě – nefunguje callback
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- 22
- Člen | 1478
use Nette\Application\UI\Control;
use Nette\Application\UI\Form;
use Nette\Diagnostics\Debugger;
class Upload extends Control
{
protected function createComponentUpload($name)
{
$form = new Form($this, $name);
$form->addUpload('upload');
$form->addSubmit('submit', 'Upload')
->onClick[] = callback($this, 'uploaded');
return $form;
}
public function uploaded(SubmitButton $form)
{
$file = $form->form->values;
Debugger::fireLog($file);
}
public function render()
{
$template = parent::createTemplate();
$template->setFile(__DIR__ . '/ImageUpload.latte');
$template->form = $this->getComponent('upload');
$template->render();
}
}
Presenter:
...
protected function createComponentUpload($name)
{
return $form = new Upload($this, $name);
}
...
Problém je v tom, že form se sice submitne, ale
onClick[] = callback($this, 'uploaded')
se neprovede. Poslední
Nette 2 beta..
Dělám něco špatně?
Editoval 22 (5. 6. 2011 8:57)
- Kurtas
- Člen | 109
Ahoj, mám podobný problém v presenteru mám udělany form, ale neprovadi se $SubmitButton->onClick[] = callback($this, ‚TodoFormSaveClicked‘); … a form je validni.
Mám poslení verzi 2.0 Beta pro php 5.3
Část presenteru:
protected function createComponentTodoForm()
{
$form = new Form;
$form->addText('text', 'Úkol', 60, 100)
->addRule(Form::FILLED, 'Musíte vyplnit text!');
$form->addSubmit('save', 'Uložit')
->onClick[] = callback($this, 'TodoFormSaveClicked');
$form->addSubmit('back', 'Zpět')->setValidationScope(NULL);
return $form;
}
public function TodoFormSaveClicked(Form $form)
{
dump($_POST);
$values = $form->getValues();
$todo = new Todo;
$todo->text = $values['text'];
$todo->added = new DateTime;
$this->model->createTodo($todo);
$this->flashMessage('Úkol vložen.');
$this->redirect('TodoList:show');
}
- Kurtas
- Člen | 109
nevim proc ale NetBeans mi classu Nette\Application\UI\Form nenabizi, tak jsem myslel ze v 2.0 neni, po tvem prispevku jsem se podival primo do lib\Nette\Application\UI\ jestli tam je ci neni a bylo jasno :)
Opravdu stacilo pridat
use Nette\Application\UI\Form;
… ten callback jsem prepsal
Diky