Předání parametru do formuláře
- m4rty
- Člen | 40
Zdravím, můj formulár má následnou strukturu
TestPresenter.php
actionMyForm($id) {
if($id) { ... } else { ... }
$skupina_id (potřebuji předat do komponenty)
}
protected function createComponentForm() {
$form = new Form();
foreach($podskupiny->find(**$skupina_id**)) {
...
}
return $form;
}
function renderMyForm() {
}
process.latte
{control form}
Jakým způsobem se předává proměnná z fce actionMyForm do komponenty createComponentForm, kde ji taky muzou rovnou vyuzit (pro vypis podskupin)?
- Jamicon
- Člen | 19
Vo svojom kóde posielam dáta do formulára napríklad takto, samozrejme tomu ešte predchádza definícia triedy a protected $riadok;.
<?php
public function __construct(\Models\TextModel $model, \DibiRow $riadok = null) {
parent::__construct(null);
$this->model = $model;
$this->riadok = $riadok;
}
protected function createComponentEditorForm() {
$form = new Form;
$form->addHidden('id');
$form->addText('url', 'Skopíruj URL zdroja:');
$form->addHidden('strana', 'Číslo stránky:');
$form->addText('zdroj', 'Uveď zdroj:');
$form->addText('nadpis', 'Nadpis článku:', 35)
->getControlPrototype()->style('font-size: 1.3em');
$form->addTextArea('ukazka', 'Ukážka:', 40, 10);
$form->addTextArea('clanok', 'Článok:', 100, 15);
$form->addSubmit('zapis', 'Zapíš');
if (!is_null($this->riadok)) $form->setValues ($this->riadok);
$form->onSuccess[] = callback($this, 'updateEditorForm');
return $form;
}
?>
- m4rty
- Člen | 40
Asi to ani nejde… nize je muj kod
class ListsPresenter extends FormPresenter {
protected $skupina_id;
actionMujForm($id) {
if($id) {
$this->skupina_id = $this->getParam('skupina');
}
else {
$this->skupina_id = $this->getModel('skupiny')->where('uzivatel.skupina', $id)..;
}
}
createComponentMujForm() {
dump($this->skupina_id)
}
}
- 22
- Člen | 1478
takhle to nemůže fungovat asi nikdy..
- createComponent je protected → protected function createComponentMyForm
- bývá dobrým zvykem označovat viditelnost metod (public, protected, private)
- mixovat české a anglické náyzvy bych se taky odnaučil
- dump v komponentě se ti provede až po připojení komponenty do stromu komponent, což nikde nevidím. Pokud chceš tedy něco dumpovat, zkus to v action metodě.
- Je ti jasné, že action je view presenteru v podstatě? Viz. životní cyklus presenteru…
Editoval 22 (2. 11. 2011 16:09)
- 22
- Člen | 1478
čili asi nějak takto:
class ListsPresenter extends FormPresenter {
protected $group_id;
public function actionMyForm($id)
{
if ($id) {
$this->group_id = $this->getParam('group');
} else {
$this->group_id = $this->getModel('group')->where('user.group', $id)..;
}
}
protected function createComponentMyForm()
{
$form = new Form();
...
dump($this->group_id);
return $form;
}
}
// MyForm.latte
{control myForm}
a měl by se ti u formu objevit i dump $group_id
Editoval 22 (2. 11. 2011 16:25)
- 22
- Člen | 1478
funguje to naprosto bez problému, pokud chceš copy/paste:
protected $group_id;
public function actionMyForm($id)
{
$this->setView('default');
if ($id) {
$this->group_id = 'fromUrl';
} else {
$this->group_id = 'fromModel';
}
}
protected function createComponentMyForm()
{
$form = new Nette\Application\UI\Form();
dump('Test:',$this->group_id);
return $form;
}
výsledek dumpu je fromURL
a budes to mít na adrese
.../<your-presenter>/my-form/5
, pokud smažu $id z URL, tak
výsledek je fromModel
stačí zkopírovat do jakéhokoliv presenteru a do šablony
default.latte
dát {control myForm}
Editoval 22 (4. 11. 2011 15:20)
- m4rty
- Člen | 40
Ahoj, diky za odpovedi. Uz jsem na to prisel. Mel jsem sem asi okopcit kompletni kod, treba bysme na chybu narazili driv :-).
Funkce action vypada totiz takto:
public function actionMyForm($id) {
if ($id) {
$this['form']['save']->caption = 'Přidat';
$this->group_id = 'fromUrl';
...
}
Tim, ze volam $this[‚form‘], tak zavola nejdriv createComponentMyForm, ale jeste bez nove pridane id v promenne group_id.
Diky za pomoc.