Dynamická hodnota selectu a inputu u formuláře z komponenty
- Donkeykong
- Člen | 39
Ahoj,
potýkám se s takovým problémem. Mám v administraci seznam aut a při kliknutí na tlačítko upravit, se mi zobrazí single page konkrétního auta se zadanými údaji, které můžu upravit, tak aby se editovali. Problém je, že nevím jak v inputech zobrazit aktuální value a v selectu daný selected, abych věděl z jaké hodnoty vlastně upravuju
Formulář tvořím klasicky v presenteru stylem:
<?php
protected function createComponentEditForm()
{
$form = new Form();
$form->addText('price','Cena');
atd atd atd....
}
?>
A v template pak vykresluju pomocí „{control editForm}“. Kdybych sestavoval formulář klasicky až v html v šabloně, tak bych to samozřejmě řešil jednoduše:
<?php
{foreach $cars as $car}
<input type="text" name="price" id="price" value="{$car->price}"/>
....
?>
Ale tím, že vykresluju formulář jako komponentu, nevím jak to nastavit. Díky za rady
- vvoody
- Člen | 910
Každý input (control) má metódu setDefaultValue
protected function createComponentEditForm()
{
$form = new Form();
$form->addText('price','Cena')->setDefaultValue('...');
}
alebo celý formulár zase metódu setDefaults
protected function createComponentEditForm()
{
$form = new Form();
$form->addText('price','Cena');
$form->setDefaults(array(
'cena' => '...'
));
}
- Donkeykong
- Člen | 39
Moc dekuju za info. Ale jak v presenteru predam ty konkretni parametry? Myslim tim jak k nim ziskam pristup? V carRepository mam
<?php
public function findSingle($id)
{
return $this->findBy(array('id'=> $id));
}
?>
a v presenteru pote:
<?php
public function renderSingle($id)
{
$this->template->cars = $this->carRepository->findBy(array('id'=>$id));
}
?>
Cili v sablone pak neni problem predavat hodnoty pomoci foreach a nasledne $car->price $car->speed atd.
Ale jak vlozim idealne ty hodnoty sem primo v presenteru?
<?php
$form->setDefaults(array(
> 'cena' => '...'
> ));
?>
Editoval Donkeykong (2. 8. 2013 13:12)
- Oli
- Člen | 1215
Mělo by to vypadat asi takhel nějak:
private $cars;
public function actionSingle($id)
{
$this->cars = $this->carRepository->findBy(array('id'=>$id));
$this['editForm']->setDefaults(array(
'price' => $this->cars->price,
// ...
));
}
protected function createComponentEditForm()
{
$form = new Form();
$form->addText('price','Cena');
// ...
}
Editoval Oli (2. 8. 2013 13:25)
- Donkeykong
- Člen | 39
Toto uz jsem prave predtim zkousel a dostaval jsem: Cannot read an undeclared property Nette\Database\Table\Selection::$price.
- Donkeykong
- Člen | 39
Ah, pridal jsem fetch a uz to slape. Diky. Chtel bych se ale zeptat jak je rozdil mezi
<?php
$this->carRepository->findBy(array('id'=>$id))->fetch();
?>
a
<?php
$this->carRepository->findBy(array('id'=>$id));
?>
V dokumentaci se u fetch pise: Returns next row of result. Ale to mi nejak nedava smysl.