Formulář jako komponenta s interfacem a parametry
- vaclav147
- Člen | 7
Dobrý den,
prosim vás, jak zápíšu do configu následující následující komponentu?
class MyForm extends Control
{
private $id;
public function construct($id)
{
$this->id = $id;
}
public function render()
{
...
}
public function createComponentMyForm()
{
$form = new UI/Form();
...
return $form;
}
}
interface IMyFormFactory
{
/** @return MyForm */
public function create($id);
}
Nevím jak to zapsat do configu abych mohl komponentu injectnout. Poradíte někdo?
- David Matějka
- Moderator | 6445
-
implement: IMyFormFactory
parameters: [id] #tady definujes parametry v tovarnicce
arguments: [%id%] #a tady kam se maji predat konstruktoru
pozn 1) kdyz registraci provadis v compiler extension, neni nutne uvadet
parameters, ty se zjisti automaticky
pozn 2) v dev verzi (budouci 2.3) nebude nutne ani uvadet arguments, sparuji se
dle nazvu
Editoval matej21 (14. 10. 2014 23:16)
- JDC
- Člen | 19
Tu interface si zaregistruj v konfigu jako službu a tu si pak injectni do presenteru. Pak stačí jen vytvořit metodu createComponentMyForm a v ní volat metodu create tvé továrničky. Nezapomeň na return u createComponent metody. Funkce musí vracet komponentu.. Pro představu nejednoduššeji:
/** @var IMyFormFactory @inject */
public $myFormFactory;
protected function createComponentMyForm() {
return $this->myFormFactory->create();
}
Jinak v NEONu službu registruješ pod services
services:
- IMyFormFactory
EDIT: Teď jsem si všiml že tvá metoda create má parametr $id a taktéž i konstruktor tvé komponenty. V tomto případě si raději naimplementuj továrničku ručně jako třídu. Ale vhodnější by bylo udělat tvé komponentě metodu setId() a tou pak ID donastavit při vytváření komponenty v presenteru nebo při volání akce.
EDIT2: Pozdě, už mě někdo předběhl a s oněco lepším řešením :D Ale i tak bych to ID nenastavoval skrz config a raději si ho tam dával až v presenteru.
Editoval JDC (14. 10. 2014 23:17)
- Michal Vyšinský
- Člen | 608
EDIT2: Pozdě, už mě někdo předběhl a s oněco lepším řešením :D Ale i tak bych to ID nenastavoval skrz config a raději si ho tam dával až v presenteru.
On také nenastavuje hodnotu $id v konfigu ale předá ji při volání metody create v presenteru.