Vlastní formulářový prvek – kam umístit a jak použít jako addPrvek()?
- Gwidion
- Člen | 13
Vytvořil jsem si vlastní jednoduchý formulářový prvek, ale ještě se
tolik neorientuji ve struktuře Nette. Podle toho, co jsem se dočetl, tak
vlastní soubory přidávám do vendor. Je to tak?
Tak jsem si vytvořil vendor\Prvek\Prvek.php, v hlavičce mám:
<?php
namespace Nette\Forms\Controls;
use Nette\Forms\Controls\BaseControl,
Nette\Utils\Html,
Nette\Forms;
class Prvek extends BaseControl
{...
?>
Teď se snažím docílit, abych mohl použít u formuláře metodu
addPrvek. Takže to musím někam registrovat… Ale kam?
Když jsem do Container.php napsal
<?php
public function addPrvek($name, $caption = NULL)
{
return $this[$name] = new Prvek\Prvek($caption);
}
?>
tak to nefungovalo.
Samotný prvek funguje, to jsem ověřil přes addComponent (ale to mi pak
neumožnilo použit další formulářové metody, jako například
->setOption()).
Je to několik začátečnických věcí, prosím o radu.
- Pavel Kravčík
- Člen | 1196
Do vendoru by si nikdy neměl nic přidávat nebo šahat. Ten by měl být spravovaný jen composerem.
Jinak na custom formulářové prvky používám tohle od Matěje.
$form = new UI\Form;
$form['druh_id'] = new \App\CustomSelectInput('Druh vozidla');
$form['druh_id']->setPrompt('~ Vyberte druh vozidla ~');
$form['druh_id']->setItems($this->vozidloModel->druhPairs());
$form['druh_id']->addRule(F::FILLED);
class CustomSelectInput extends \Nette\Forms\Controls\SelectBox
{
//nějaká funkčnost
}
Editoval kzk_cz (19. 3. 2015 10:18)
- Gwidion
- Člen | 13
kzk_cz napsal(a):
Do vendoru by si nikdy neměl nic přidávat nebo šahat. Ten by měl být spravovaný jen composerem.
Jinak na custom formulářové prvky používám tohle od Matěje.
$form = new UI\Form; $form['druh_id'] = new \App\CustomSelectInput('Druh vozidla'); $form['druh_id']->setPrompt('~ Vyberte druh vozidla ~'); $form['druh_id']->setItems($this->vozidloModel->druhPairs()); $form['druh_id']->addRule(F::FILLED); class CustomSelectInput extends \Nette\Forms\Controls\SelectBox { //nějaká funkčnost }
Sorry, jsem lemro, ale ještě to nemám.
Prvek.php mám v adresáři app/controls, v něm mám namespace
Nette\Forms\Controls;
V HomepagePresenteru.php pak píšu $form[‚prvek‘] = new
\App\Controls\Prvek(‚něco‘);
Výsledek je Class ‚App\Controls\Prvek‘ not found
- romiix.org
- Člen | 343
Ak máš nastavený namespace Nette\Forms\Controls
, tak by si
mal použiť:
$form[‘prvek’] = new \Nette\Forms\Controls\Prvek(‘něco’);
Ak chceš použiť:
$form[‘prvek’] = new \App\Controls\Prvek(‘něco’);
tak musíš nastaviť namespace App\Controls
.