Best practice: předávání parametrů
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Peetee
- Člen | 75
Ahoj,
již delší dobu mi v hlavě bublá tato otázka, přestože jsem našel nějaké řešení, rád bych se zeptat, zda je správné, zda je správný rozvíjet myšlenku tímto směrem.
Vím, že se tu podobná témata již několikrát řešila, přesto jsem nenašel jednoznačnou odpověď.
Myslím, že nejlépe se to bude ukazovat na příkladu. Nechť základ aplikace je Akrabat z distribuce a já bych chtěl ke každému albu moct přidat a spravovat komentáře. (Tento příklad nemá žádné reálné využití, pouze jsem hledal na čem bych mohl danou techniku demonstrovat).
<?php
public function renderDefault($id=0)
{
$komentare = new Komentare();
$this->template->komentare = $komentare->findForAlbum($id);
$this->template->albumID=$id;
}
public function renderAdd($albumId=0)
{
$this['komentForm']['save']->caption = 'Přidat';
$this['komentForm']['albums_id']->value=$albumId;
}
public function renderEdit($id = 0)
{
$form = $this['komentForm'];
if (!$form->isSubmitted()) {
$komentare=new Komentare();
$row = $komentare->find($id)->fetch();
if (!$row) {
throw new NBadRequestException('Record not found');
}
$form->setDefaults($row);
}
}
protected function createComponentKomentForm()
{
$form = new NAppForm;
$form->addText('obsah', 'Obsah komentáře:')
->addRule(NForm::FILLED, 'Napište svůj komentář');
$form->addHidden('albums_id', 0);
$form->addSubmit('save', 'Save')->setAttribute('class', 'default');
$form->addSubmit('cancel', 'Cancel')->setValidationScope(NULL);
$form->onSubmit[] = callback($this, 'komentFormSubmitted');
$form->addProtection('Please submit this form again (security token has expired).');
return $form;
}
public function komentFormSubmitted(NAppForm $form)
{
if ($form['save']->isSubmittedBy()) {
$id = (int) $this->getParam('id');
$data=$form->getValues();
$komentare=new Komentare();
if ($id > 0) {
$komentare->update($id,$data);
$this->flashMessage('Komentář byl upraven.');
} else {
$komentare->insert($data);
$this->flashMessage('Komentář byl přidán');
}
}
$this->redirect('default',$data['albums_id']);
}
?>
Tento příklad je funkční. Moje otázka se týká, zda se jedná o správné řešení, zda tam nevytvářím bezpečnostní díry apod.