nejlepsi zpusob jak sdilet form s co nejmin psanim?
- wwwnick
- Člen | 4
Ahojte,
ucim se nette a snazim se zjistit jak udelat nasledujici vec
mam web rozdeleny na par presenterov,
v @layout.latte mam {control someForm}
ale nelibi se mi myslenka ze bych v kazdem presenteru mel psat stejny kod,
tak jsem si precetl toto: https://doc.nette.org/cs/forms#…
a https://www.youtube.com/watch?…
ale to se mi nelibi protoze sice mi to zkrati psani kodu ale stejnak to musim
psat do kazdeho presenteru.
co by se mi libilo, by bylo aby {control someForm} volalo primo komponentu aniz
bych musel cokoliv psat do patricnych presenteru
a snazil jsem se to udelat nejak takto…
v @layout.latte sem to zmenil na {control some}
-- app/components/some.php
<?php
use Nette\Application\UI,
Nette\ComponentModel\IContainer;
class someControl extends UI\Control
{
public function createComponentSomeForm()
{
$form = new Nette\Application\UI\Form;
//...
$form->onSuccess[] = $this->submitted;
return $form;
}
public function submitted($form, $values)
{
// do stuff
}
public function render()
{
$this->template->setFile(__DIR__."/SomeForm.latte")
$this->template->render();
}
}
?>
-- app/components/SomeForm.latte obsahuje samotny form
{control SomeForm}
ale to nefunguje :/ s chybovou hlaskou: Component with name ‚some‘ does
not exist.
otazka zni jak na to a jestli je to dobra cesta.
diky za pomoc
- David Matějka
- Moderator | 6445
„magicke“ vytvareni komponent prinasi bezpecnosti diru. Pomoci
http://example.com/?do=someComponent-submit
se necha inicializovat komponenta. Kdyby to bylo magicke, mohl by utocnik inicializovat (jakoukoliv) tridu. Proto se do presenteru davaji createComponent* metody. Pokud mas vsak ty same v kazdem presenteru (treba loginForm), mel bys zvazit umisteni teto createComponent* metody do base presenteru. Pokud je to jen v nektery ruznych presenterech, muzes zvazit pouziti trait (php 5.4+)
Editoval matej21 (13. 8. 2014 22:41)