Vlastní formulářový prvek – kam umístit a jak použít jako addPrvek()?

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

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
+
+1
-

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
+
0
-

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
+
+1
-

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.

Gwidion
Člen | 13
+
0
-

romiix.org napsal(a):

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.

Díky!!!