Component with name ‚todoForm‘ does not exist
- Manny7
- Člen | 67
Zdravím,
pokouším se vytvořit Todo aplikaci a mám problém s neexistující
třídou. Do souboru Todo.php jsem přidal následující kód pro vykreslení
formuláře:
public function createComponentTodoForm()
{
$form = new AppForm;
$form->addText('text', 'Úkol', 60, 100)
->addRule(Form::FILLED, 'Musíte vyplnit text!');
$form->addSubmit('save', 'Uložit');
$form->addSubmit('back', 'Zpět')->setValidationScope(NULL);
$form->onSubmit[] = callback($this, 'processTodoForm');
return $form;
}
public function processTodoForm(AppForm $form)
{
if($form['save']->isSubmittedBy()) {
$this->flashMessage('Úkol vložen.');
$values = $form->getValues();
$todo = new Todo;
$todo->text = $values['text'];
$todo->added = new DateTime;
$this->model->createTodo($todo);
}
$this->redirect('Todolist:show');
}
A v souboru add.phtml, kde by se tento formulář ml vykreslit, mám tyto dva řádky:
{block content}
{widget todoForm}
a při přístupu na stránku, která by tento formulář měla vykreslit,
dostanu toto hlášení „Component with name ‚todoForm‘ does not
exist.“.
Přeložit si tuto hlášku sice dovedu, ale nevím, kde by měla být chyba,
zatím se v Nette trochu plácám a v každé deuhé věci dostanu nějaký
error..
Neporadili byste, v čem je tentokrát chyba?
- Manny7
- Člen | 67
Posutpoval jsem následovně
Nevěděl jsem, kam umístit ty 2 metody pro formulář, tka jsem je dal do Todo.php
(/app/models) – v tomto adresáři mám ještě soubor TodoManager.php
V /app/templates/Todolist/ mám add.php
Ale nějak nevím, co s tou hláškou, která po mně chce „todoForm“ třídu
- redhead
- Člen | 1313
Teď jsem ti to psal, ty metody musí být ve třídě presenteru (TodolistPresenter.php). Je to napsané i v QS, takže si nepostupoval asi pozorně.. (hláška po tobě nechce třídu, ale componentu jménem todoForm, která se vytváří právě tou metodou createComponentTodoForm a ta musí být v presenteru)
btw: šablony by měly mít koncoku .phtml (ne .php, ale to je detail)
Editoval redhead (25. 7. 2010 16:13)
- Manny7
- Člen | 67
tak jsme to poupravil, přemístil do TodolistPresenter.php, ale vyskytla se
mi ještě chybka – dostávám nyní error typu: „Class ‚AppForm‘ not
found“. Ten Error log mi ukazuje na řádek:
„$form = new AppForm;“ – zkoušel jsem tomuto metodu poupravit podle
toho, co jsem našel tady na foru:
public function createComponentTodoForm($name)
{
$form = new AppForm($name);
$form->addText('text', 'Úkol', 60, 100)
->addRule(Form::FILLED, 'Musíte vyplnit text!');
$form->addSubmit('save', 'Uložit');
$form->addSubmit('back', 'Zpět')->setValidationScope(NULL);
$form->onSubmit[] = callback($this, 'processTodoForm');
return $form;
}
Ale to budu dostávat pořád tu samou chybku.