createComponent s parametrem
- Gormit
- Člen | 5
Vytvářím formulář s hidden inputem, ale nedaří se mi dostat data do továrničky formuláře
šablona:
<?php
{block content}
id(template): {$zdroj_id}<br/>
{widget zdrojForm, $zdroj_id}
?>
presenter:
<?php
public function createComponentZdrojForm($id){
echo "id(presenter):" . $id . "<br>";
$zdroj = $this->model->getZdroj($id);
var_dump($zdoj);
echo "/zdroj<br>";
$form = new NForm();
$form->addText('nazev', 'Název')
->addRule(NForm::FILLED, 'Musíte vyplnit název')
->setDefaultValue($zdroj->name);
$form->addText('url', 'Url zdroje')
->addRule(NForm::URL, 'Musíte zadat url zdroje')
->addRule(NForm::FILLED, 'Musíte zadat url zdroje')
->setDefaultValue($zdroj->link);
$form->addSubmit('save', 'Uložit');
$form->addSubmit('back', 'Zpět')
->setValidationScope(NULL);
$form->addHidden('id')
->setValue($id);
$form->onSubmit[] = callback($this, 'processZdrojForm');
return $form;
}
?>
výpis:
id(template): 1
id(presenter):zdrojForm
Plus další notices
Tušim, že jsem něco špatně pochopil, jen nemůžu přijít na to co.
PHP 5.3.5
Nette 0.9.6
- Nox
- Člen | 378
{widget name $param1}
nebo {control name $param1}
neznamená vytvoření controlu, ale na dané místo se vloží přímo příkaz
vykreslení – tzn. parametry z šablony se dostávají jen do funkce
render()
skupina funkcí createComponent* bere jako parametr jméno, což bude u tebe „zdrojForm“
pokud chceš vložit nějaký spešl parametr, obstarej si ho nějak v té továrně… ulož si to třeba jako $this->zdrojId (kde $this je ten presenter) a tam si ho zase vem přes $this->zdrojId
- Bertram
- Člen | 75
Ahoj, jak tuto samou situaci řešit pokud tento spešl parametr získám až v šabloně, například v nějakém cyklu, kde v každém průchodu vytvářím tutéž komponentu, které potřebuji pokaždé předat jiný parametr?
Možné řešení budou asi tato, ale nevím, jestli je to správné řešení.
// přímo do továrničky
{?$component['myForm']['id']->value = $pruchod->id}
// nastavení vlastnosti presenteru
{?$presenter->value = $pruchod->id}
A je to vůbec správné, že potřebuji něco z šablony vracet do presenteru nebo komponenty?
- norbe
- Backer | 405
Nejsnadnější řešení je to, že parametr přidáš do názvu komponenty. Příklad:
{widget zdrojForm-$zdroj_id}
A pak v presenteru budes mit neco jako:
protected function createComponent($name) {
if(Strings::startsWith("zdrojForm")) {
// vytvoreni komponenty, parametr jde vycůcnout z názvu komponenty
}
else {
return parent::createComponent($name);
}
}
- Gormit
- Člen | 5
Postup od nox se mi povedl, ještě jsem do createComponentZdrojForm()
přidal na konec echo $form;
Ale stejně se mi zdá, že to není ono, možná jsem měl napsat o co se
vlastně snažim:
Potřebuji formulář s předvyplněnými daty, která se berou z databáze. Formulář příslušný řádek v db updatuje a měl by být na samostatné stránce.
- Nox
- Člen | 378
Jestli to chápu dobře, tak je to podobné jako tady u tohoto nedávného
dotazu
https://forum.nette.org/…ho-odeslanim
tak v podstatě místo toho ID se (taky) předají ty data