Jak vytvořit vlastní control?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
simPod
Člen | 383
+
0
-

Chtěl bych si do formuláře přidat vlastní Control. Jak na to? Částečně jsem se inspiroval tady: https://forum.nette.org/…stni-control

Momentálně jsem se zasekl na tom, že nevím jak přidat metodu $form->addMyControl('name'); Díky moc za rady.

Editoval simPod (5. 4. 2015 2:45)

Zax
Člen | 370
+
+1
-

Použij extensionMethod na Nette\Forms\Container.

simPod
Člen | 383
+
+1
-

Vyzkouším. Nějaká možnost jak to udělat aby to napovídalo i IDEčko? Myslím, že takto mi to nenapoví.

Pak mám ještě dotaz, kam ideálně tu extensionMethod dát, aby to bylo pokud možno čistý. Zatím mám vytvořenu class MyControl extends BaseControl { v autoloadly složce. Dík

jiri.pudil
Nette Blogger | 1032
+
+2
-

Jestli chceš čisté řešení, můžeš si ten control taky přidat jednoduše ručně:

$form->addComponent(new MyControl(), 'name');
David Matějka
Moderator | 6445
+
+3
-

@jiri.pudil +1, taky to mam radeji nez extensions method. Necha se to zapsat taky:

$form['name'] = new MyControl();
simPod
Člen | 383
+
0
-

Prošel jsem pár addonu a všude je to dělaný přes ten exntesionMethod tak je to asi jasný :)

//edit ten jsem si vsiml dalsich odpovedi, taky pekny, zkusim oboje a uvidim co mi sedne vic. diky moc!

Editoval simPod (5. 4. 2015 11:50)

Unlink
Člen | 298
+
+1
-

Prepáč že sa ti tu montujem, ale napadlo ma ešte že by sa dalo, že by si spravil BaseForm ktorý by si podedil z nette formu a v tejto triede by si pridal tú metódu. Napovedanie IDEčka fungovať bude ale neviem či to je čisté riešenie.

Zax
Člen | 370
+
+2
-

@Unlink BaseForm má tu nevýhodu, že ti ta custom metoda bude fungovat jenom na objektu třídy Form, ale už ne na kontejnerech vytvořených přes $form->addContainer(). Asi se s tím dá i žít pokud člověk kontejnery nevyužívá, ale je dobrý to aspoň vědět ;-)

simPod
Člen | 383
+
0
-

Tak jo, díky všem za tipy, teď už si s tím poradím ;)