Přidání jednoho prvku z Container-u do formuláře
- czm4rty
- Člen | 29
Lze nějakým způsobem vytvořit Container, kde si nadefinuji formulářové prvky a poté je z něj ty prvky mohu vytáhnout a přiřadit do formuláře?
Takhle cca vypadá ve zkratce Car Container.
class CarContainer extends Nette\Forms\Container {
public function __construct() {
parent::__construct();
$this->monitor('Nette\Forms\Form');
}
protected function attached($obj) {
parent::attached($obj);
if ($obj instanceof \Nette\Forms\Form) {
$this->configure();
}
}
protected function configure() {
$this->addText('name', 'Name:');
$this->addSelect('type', array(...));
}
}
Rád bych, aby se komponenty z CarContaineru daly vytáhnout nějakým podobným způsobem:
class TestForm extends Nette\Application\UI\Form{
function __construct() {
$car = new CarContainer;
$this->addCompomnent('type', $car['type']);
}
}
Takto to ale nelze, pač se vyhodí chyba: „Component ‚type‘ already has a parent.“.
(pozn.: Nechci přiřadit celý CarContainer, ale jen některé jeho prvky.)
Editoval czm4rty (2. 4. 2013 13:35)
- David Matějka
- Moderator | 6445
jestli nepotrebujes ten container, tak bych to resil spis nejak takhle:
class CarInputsFactory
{
public function createNameInput()
{
$input = new TextInput;
...
return $input;
}
}
//a form:
$factory = new CarInputsFactory;
$form = new Form;
$form['name'] = $factory->createNameInput();
- David Matějka
- Moderator | 6445
tak to bych tam do toho CarInputsFactory dal metodu treba createContainer s nejakym takovymhle obsahem:
public function createContainer()
{
$container = new Container();
$container['name'] = $this->createNameInput();
...
return $container;
}
- Šaman
- Člen | 2666
Když potřebuješ jen část, tak nepotřebuješ kontejner. Kontejner chápu
jako skupinu inputů, které patří k sobě a vlastně tak trochu tvoří
samostatný i když složený input (třeba adresa).
Jestli tím chceš řešit jednotnou definici polí, které se mohou vyskytovat
jak v kontejneru, tak samostatně, tak bych si je nejprve v nějaké třídě
definoval a pak z nich jen poskládal ten kontejner, nebo je umístil do
formuláře.
Editoval Šaman (2. 4. 2013 22:18)