Nelze vytvořit instanci pro formulář
- Xchos
- Člen | 40
Zrdavím všechny,
začal jsem používat Nette 2.2 a snažím se o vytvoření aplikace pomocí
MVC modelu. Problém všam nastal v admin modulu, kde
potřebuji vytvořit editační formulář a ejhle .. Dostávám chybu
Class ‚AdminModule\UI\Form‘ not found
při volání
$form = new UI\Form;
Podotknu že hlavičku soubrou mám
use Nette\Application\UI\Form,
Nette\Utils\Strings;
namespace AdminModule;
takže bych odhadoval že namespace to nedělá jen někde dělám banální chybu a nevidím jí.
Tvorba komponenty v public function createComponent($name) – switchem řešené
case 'new':
$form = new UI\Form;
$form->addText('key', 'Klíč:')->addRule(Form::FILLED, 'Zadejte titulek');
$form->addText('value', 'Hodnota:');
$form->addHidden('id', 'id');
$form->onSuccess[] = callback($this, $name.'Form');
if($name=='edit') {
$form->setDefaults(Globals::GetGlobalByID($this->getParam('id')));
$form->addSubmit('submit', 'Upravit');
} else $form->addSubmit('submit', 'Přidat');
return $form;
- Xchos
- Člen | 40
Díky .. Jinak se chci zeptat jestli ta logika mezi $name edit a $name new může být takhle v presenteru viz
if($name=='edit') {
$form->setDefaults(Globals::GetGlobalByID($this->getParam('id')));
$form->addSubmit('submit', 'Upravit');
} else $form->addSubmit('submit', 'Přidat');
nebo existuje nějaké elegantnější řešení, které jsem přehlédl?
mám na ve switchi totiž
case 'edit':
case 'new':
Editoval Xchos (13. 9. 2014 11:02)
- Xchos
- Člen | 40
tvořím komponenty v něm, teda pokud to není chyba .. („edit“ a „new“ nahrazeno za „editForm“ a „newForm“)
public function createComponent($name) {
parent::createComponent($name);
switch ($name) {
case 'grid':
$grid = new \DataGrid($this, $name);
$grid->bindDataTable($this->model->getDataSource());
$grid->itemsPerPage = 10;
$grid->keyName = 'id';
$grid->multiOrder = FALSE;
$grid->rememberState = TRUE;
$grid->addColumn('key', 'Titulek')->addFilter();
$grid->addColumn('value', 'Zobrazeno')->addFilter();
$grid->addActionColumn('Operace');
if($this->authorizator->isAllowed($this->permissionName, "EDIT")) $grid->addAction('upravit', 'Globals:edit');
if($this->authorizator->isAllowed($this->permissionName, "DELETE")) $grid->addAction('smazat', 'Globals:');
return $grid;
case 'editForm':
case 'newForm':
$form = new Form;
$form->addText('key', 'Klíč:')->addRule(Form::FILLED, 'Zadejte titulek');
$form->addText('value', 'Hodnota:');
$form->addHidden('id', 'id');
$form->onSuccess[] = callback($this, $name);
if($name=='edit') {
$form->setDefaults($this->model->getGlobalById($this->getParam('id')));
$form->addSubmit('submit', 'Upravit');
} else $form->addSubmit('submit', 'Přidat');
return $form;
}
}
- David Matějka
- Moderator | 6445
takhle se to delalo nekdy v nette 0.8.
Vytvor si pro kazdou komponentu createComponentFoo metodu, takze treba
public function createComponentGrid()
{
$grid = new \DataGrid(); //ani nemusis predavat $this a $name, komponenta se pripoji po vraceni z teto metody
return $grid;
}
- Xchos
- Člen | 40
je to takhle lepší?
public function createComponentGrid() {
$grid = new \DataGrid($this, 'grid');
$grid->bindDataTable($this->model->getDataSource());
$grid->itemsPerPage = 100;
$grid->keyName = 'id';
$grid->multiOrder = FALSE;
$grid->rememberState = TRUE;
$grid->addColumn('key', 'Titulek')->addFilter();
$grid->addColumn('value', 'Zobrazeno')->addFilter();
$grid->addActionColumn('Operace');
if($this->authorizator->isAllowed($this->permissionName, "EDIT")) $grid->addAction('upravit', 'Globals:edit');
if($this->authorizator->isAllowed($this->permissionName, "DELETE")) $grid->addAction('smazat', 'Globals:');
return $grid;
}
private function createForm(){
$form = new Form;
$form->addText('key', 'Klíč:')->addRule(Form::FILLED, 'Zadejte titulek');
$form->addText('value', 'Hodnota:');
$form->addHidden('id', 'id');
return $form;
}
public function createComponentNewForm(){
$form = $this->createForm();
$form->onSuccess[] = callback($this, "newForm");
$form->addSubmit('submit', 'Přidat');
return $form;
}
public function createComponentEditForm(){
$form = $this->createForm();
$form->onSuccess[] = callback($this, "editForm");
$form->setDefaults($this->model->getGlobalById($this->getParam('id')));
$form->addSubmit('submit', 'Upravit');
return $form;
}
jinak mam svůj vlastní authorizátor, jelikož ten na nette mi moc nevyhovoval a neporozumněl jsem mu úplně. Každopádně ten co mám udělanej mi přijde jako dostačující.
Editoval Xchos (15. 9. 2014 20:28)