Defaultní hodnoty formuláře, jak načíst do Presenteru
- jackm
- Člen | 54
Ahoj, mám Nette 2.0 ALPHA 5.2 NONPREFIX. PHP 5.2.
Můj dotaz, potřebuji si načíst do formuláře defaultní hodnoty(z DB),
jenže nevím jak na to, když ten formulář je v presenteru a hodnoty se mi
daří načíst jen do šablony. V presenteru to píše vždy, že nejsou
definovány.
Úryvek toho co mám a hlásí, nedefinované hodnoty proměnné $post.
public function renderSingle($id)
{
$this->template->titulek = 'editace';
$this->template->post=EditModel::fetchSingle($id);
}
public function createComponentEditForm() //nešlo ani ($id)
{
$this->template->post = EditModel::fetchSingle($id); //jen jsem zkoušel, ale bez výsledku, prostě to asi do Presenteru neumí načíst
$f = new AppForm;
$f->addText('rubrika','Rubrika:')
->setDefaultValue($post['rubrika']);
$f->addText('datum','Změněno:')
->setDefaultValue($post['zmeneno']);
$f->addTextArea('obsah','Obsah:')
->setDefaultValue($post['obsah']);
$f->addSubmit('uprav','upravit');
$f->addHidden('id',$this->request->params['id']);
$f->onSubmit[] = callback($this, 'signInFormSubmitted');
return $f;
}
Mě napadlo, dát tedy formulář do šablony, ale tam se mi vykreslí akorát jako text, navíc jsem někde četl, že se to do šablony nemá dávat, a radši bych to měl také v presenteru, abych mohl kontrolovat jeli odeslaný… Díky moc
- jackm
- Člen | 54
Děkuji to mi už funguje. Mám ale další problém.
Presenter
public function signInFormSubmitted($f)
{
$id=$this->request->params['id'];
$data=$f->getValues();
$this->template->edit = EditModel::editSingle($id);
}
Model
public static function editSingle($id) {
return dibi::query('UPDATE [prispevky] SET [rubrika],[zmeneno],[obsah]', $data, 'WHERE [id]=%i', $id);
}
Chyba je, že to nenačte proměnnou $data model, ale myslím že i ten query jsem sestavil blbě, dělám to pokus omyl…
- jackm
- Člen | 54
Díky moc za pomoc. Myslím, že ten dotaz by měl mít ještě '' u WHERE tedy:
public static function editSingle($id) {
return dibi::query('UPDATE [prispevky] SET', $data,'WHERE [id] = %i', $id);
}
Presenter jsem upravil:
public function signInFormSubmitted($f)
{
$id=$this->request->params['id'];
$data = $f->getValues();
EditModel::editSingle($data,$id);
$this->template->edit = EditModel::editSingle($id);
}
Ale $data v Modelu jsou pořád nedefinovány. :(
Editoval jackm (2. 4. 2011 23:47)
- jackm
- Člen | 54
Tož nevím jak je to možný, ale když to šlo byl zakomentovaný
dotaz.
Všiml jsem si toho, odkomentoval ho a najednou to nejde. :‚(
Dotaz: return dibi::query('UPDATE [prispevky] SET‘, $data,‚WHERE [id] =
%i‘, $id);
DibiDriverException #1064
Va-B�e syntaxe je n�jak� divn� bl-B�zko '1 WHERE `id` = 0, 2011, 0, 1' na ��dku 1 search►
SQL ▼
UPDATE `prispevky`
SET 1
WHERE `id` = 0, 2011, 0, 1
163: throw new DibiDriverException(mysqli_error($this->connection), mysqli_errno($this->connection), $sql);
- jackm
- Člen | 54
Změnil jsem všude pořadí $data,$id a jde to.
public static function editSingle($data, $id) {
EditModel::editSingle($data,$id);
$this->template->edit = EditModel::editSingle($data,$id);
Takže moc díky, a k těm statickým funkcím, já jsem rád, že to
jakstaks chápu. :D
Ten QUICK jsem se to podle něj chtěl učit, ale prostě jsem to vůbec
nechápal. Až jeden tut na blog, a debug v Nette mi pomohl pochopit to
trochu.
Editoval jackm (3. 4. 2011 0:32)