Defaultní hodnoty formuláře – jak na ně přes „fasádu“?
- Grelek
- Člen | 233
Zdravím,
byl jsem na školení od Davida Grudla a tam jsem se rozhodl, že přepíšu stávající aplikaci do podoby, která odpovídá kostře aplikace, kterou jsme na školení psali.
Problém je v tom, že když v HomepagePresenteru, který je v Admin
modulu, vytvořím formulář a chci do něj načíst defaultní hodnoty, nevím
jak na to. Níže přikládám kód HomepagePresenter
u a
HomepageFacade
.
HomepageFacade:
<?php
class HomepageFacade extends Nette\Object
{
public $db;
public function __construct(Nette\Database\Connection $db)
{
$this->db = $db;
}
public function getBoxes()
{
return $this->db->table('homepageboxes');
}
public function getBox($id)
{
$box = array($this->db->query("SELECT id, title, content, modified FROM homepageboxes WHERE id=$id"));//->fetch('id', 'title', 'content', 'modified'));
}
}
HomepagePresenter:
<?php
namespace AdminModule;
use Nette\Application\UI\Form,
Nette;
/**
* Default admin presenter.
*/
class HomepagePresenter extends SecuredPresenter
{
private $homepageFacade;
private $id;
function __construct(\HomepageFacade $homepageFacade)
{
$this->homepageFacade = $homepageFacade;
}
public function renderDefault()
{
$this->template->boxes = $this->homepageFacade->getBoxes();
}
public function actionEditBox($id)
{
}
public function createComponentEditBoxForm()
{
$form = new Form();
$form->addText('id', 'ID')
->setRequired('Prosím, vyplňte ID.')
->addRule(FORM::INTEGER, 'Hodnota pole ID musí být celočíselná.')
->addRule(FORM::MAX_LENGTH, 'Zadané ID je příliš dlouhé, maximální délka je 10 čísel.', 10);
$form->addText('title', 'Titulek')
->setRequired('Prosím, vyplňte titulek.')
->addRule(FORM::MAX_LENGTH, 'Zadaný titulek je příliš dlouhý, maximální délka je 200 znaků.', 200);
$form->addTextArea('content', 'Obsah');
$form->addText('modified', 'Upraveno');
$form->addSubmit('edit', 'Upravit');
$form->onSuccess[] = array($this, 'editBoxFormSubmitted');
return $form;
}
}
Omlouvám se za delší post, ale opravdu nevím, kde je chyba. Díky za všechny případné odpovědi.
- Grelek
- Člen | 233
Tak jsem tu znovu, ovšem s dotazem ohledně databáze.
V HomepagePresenter
u mám:
$this['editBoxForm']->setDefaults(array(
'id' => $this->homepageFacade->db->exec("SELECT `id` FROM `homepageboxes` WHERE id=$id"),
'title' => $this->homepageFacade->db->exec("SELECT `title` FROM `homepageboxes` WHERE id=$id"),
'content' => $this->homepageFacade->db->exec("SELECT `content` FROM `homepageboxes` WHERE id=$id"),
'modified' => $this->homepageFacade->db->exec("SELECT `modified` FROM `homepageboxes` WHERE id=$id"),
));
Vím, je to trochu nešikovné, ale o to mi teď nejde.
I přesto, že si do každého prvku formuláře „uložím jiný SQL
dotaz“, ve všech prvcích je naprosto stejná hodnota, tj. 1, protože se
vytáhne z 'id' => $thi...
hodnota 1. Netuším ale, proč
je všude.