Znovupoužiteľné formuláre a best practise
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Unlink
- Člen | 298
Zdravím
je jasné, že formuláre píšeme pomocou továrničok (https://forum.nette.org/…nebo-tovarna).
Mňa by teraz zaujímalo ako to prakticky použiť.
Majme situáciu: požadujem formulár na vkladanie a editáciu dát.
Takže, vytvorím továrničku:
class FormularFactory extends Object {
private $myModel;
function __construct(MyModel $myModel)
{
$this->myModel = $myModel;
}
public function create($id = NULL)
{
$form = new Form();
//Vytvoríme formulár podľa potrieb
$form->onSuccess[] = [$this, 'formSubmitted'];
if ($id != NULL) {
$form->setDefaults($this->myModel->find($id));
}
return $form;
}
public function formSubmitted(Form $form)
{
$this->myModel->save($form->getValues());
}
}
Teraz neviem či je to nastavovanie hodnôt pri edite takto čisté ale nič lepšie ma nenapadlo.
A teraz problém, ako to čisto napojiť na presenter.
- potrebujem overovať oprávnenia (to by sa malo dať z časti na úrovni presentera – oprávnenia na akcie + kontrola odkiaľ vytváram komponentu)
- čo ak zadám neplatné id? vyhodiť výnimku a odchytávať ju v createComponent?
- čo ak budem chcieť kontrolovať napríklad, že môžem editovať len entitu, ktorej som autorom, opäť vyhadzovať výnimku a odchytávať v createComponent
- ako oboznámiť presenter s výsledkom (spraviť si event v továrničke?)
- ak mám
actionEdit($id)
v presentery, ako preniesť parameter $id do továrničky
je toto v poriadku?
class MyPresenter extends Presenter
{
protected $id = NULL;
public function actionEdit($id)
{
$this->id = $id;
}
protected function createComponentFormular()
{
$form = $this->formFactory->create($this->id);
return $form;
}
}
Ak máte ešte nejaké tipy, tak kľudne sem s nimi.
Ďakujem :)
- Šaman
- Člen | 2668
No, on ten model presenter pořebuje většinou v
renderDetail()
, takže tenhle požadavek mě zatím nepálil.
Dřív jsem taky zkoušel mít chytré formuláře, ale nějak jsem došel ke
zkušenosti, že přemíra vlastní invence formulářům škodí. I když
zrovna to načítání hodnot by umět mohl.