createComponentForm + manuální vykreslování formuláře
- na1k
- Člen | 288
Ahoj, mám trochu problém. Už nějakou dobu na mě Nette křičí, že mé
prepareXY
metody jsou deprecated a ať je nahradím metodami
createComponentXY
. Což o to, továrničky využívám a jsou
fajn, ale u formuláře používám manuální vykreslování
(begin,errors,body,end) a nevím, jak to skloubit dohromady.
{control form}
mi vykreslí celý formulář a pak už mě
napadá jen v render fázi přiřazovat
$template->form = $this->createComponentForm()
a to mi
nepřijde zrovna košér (tuším jsem někde četl, že na form je v render
fázi už pozdě). Ikdyž možná jsem jenom moc rozežraný ze všech těch
widgetů :)
Co byste mi doporučili? Není na to ještě nějaká jiná finta?
- Ondřej Brejla
- Člen | 746
public function actionSmth() {
$this->template->form = $this->getComponent('form');
}
To by nešlo?
- David Grudl
- Nette Core | 8228
Klidně i v render:
public function renderSmth() {
$this->template->form = $this['form'];
}
Nebo rovnou v šabloně:
{$presenter['form']->render('begin')
- na1k
- Člen | 288
Ano! ArrayAccess je ten trik … že mi to nedošlo :)
Trochu mě zmátlo tady to
upozornění, ale pak mi došlo že používám Form
a ne
AppForm
. Teď si ale říkám, jestli to není špatně,
AppForm
by snad měl být pro větší aplikace lepší.
Ale svému prepareXY
jsem předával k tvorbě formuláře
parametr – id záznamu který se přes setDefaults
načte –
jak ho továrně předám při volání přes ArrayAccess? Anebo je špatné
form předvyplňovat už v továrně a mám to dělat až v
actionXY
a Nette se mě tímto snaží dotlačit k best
practice?
- PetrP
- Člen | 587
na1k napsal(a):
Ale svému
prepareXY
jsem předával k tvorbě formuláře parametr – id záznamu který se přessetDefaults
načte – jak ho továrně předám při volání přes ArrayAccess? Anebo je špatné form předvyplňovat už v továrně a mám to dělat až vactionXY
a Nette se mě tímto snaží dotlačit k best practice?
Máš asi 2 možnosti. První je v createComponentForm si vytáhnout id
přes $this->getParam(‚id‘)
Což já považuju za lepší řešení (vše je na jednom místě)
private function createComponentForm()
{
...
$form->setDefaults( $this->model->getDataById( $this->getParam('id') ) );
}
Nebo co radil někde david vyplnit si data třeba v action
public function actionXy($id)
{
$this['form']->setDefaults( $this->model->getDataById($id) );
}