Ako na povinne parametre v metodach ako create, view, edit a delete
- piler
- Člen | 111
Mam route:
<?php
$router[] = new Route('<presenter>/<action>/<id>', array(
'presenter' => 'Default',
'action' => 'default',
'id' => NULL,
));
?>
A presenter napr. ArticlesPresenter, ktory mam metody default, create, view,
edit, delete
pri default nepotrebujem id, lebo tam zobrazim len list clankov.
Ale napr. pri metode edit je id paramter povinny. ja to riesim v tychto metodach nasledovne:
<?php
public function actionEdit($id)
{
if ($id === NULL) {
$this->flashMessage('...');
$this->redirect('default');
}
}
?>
Co sa mi zda velmi neprakticke. Nemate nejaky lepsi postup, ako toto riesit?
Vdaka
- piler
- Člen | 111
nAS napsal(a):
Tak si to rozdel na vic routeru:
<?php $router[] = new Route('<presenter>/create', array( 'presenter' => 'Default', 'action' => 'create', )); $router[] = new Route('<presenter>/edit/<id [0-9]+>', array( 'presenter' => 'Default', 'action' => 'edit', )); ?>
a ked ma napr. ArticlesPresenter 10 actions tak mam spravit 10 routes? ked bude mat aplikacia 20 presenterov * 10 actions = 200 routes…to asi nie je moc dobre riesenie…alebo som ta zle pochopil?
- Panda
- Člen | 569
Já osobně nějaké povinné parametry vůbec neřeším – v každé takové akci stejně musím provést kontrolu, jestli specifikovaná položka existuje. A hledání špatného ID a NULL skončí stejným výsledkem – položka neexistuje.
Rozdělení na více routerů je nepraktické a zbytečně zatěžující – vyhodnocování složitých regulárních výrazů, do kterých se routy překládají, stojí dost času.
- Ondřej Mirtes
- Člen | 1536
Pokud má být parametr v dané action nepovinný, napíšeš do hlavičky
metody $id=NULL
, jinak to, že je jeho nepovinnost nastavená
v routeru, neřešíš.
Pokud podle toho ID hledáš něco v databázi (asi pokaždé) a nenajdeš to tam, měl bys vyhazovat BadRequestException, která zařídí, že se na produkčním serveru zobrazí ErrorPresenter se 404kou.
- piler
- Člen | 111
Ondřej Mirtes napsal(a):
Pokud má být parametr v dané action nepovinný, napíšeš do hlavičky metody
$id=NULL
, jinak to, že je jeho nepovinnost nastavená v routeru, neřešíš.Pokud podle toho ID hledáš něco v databázi (asi pokaždé) a nenajdeš to tam, měl bys vyhazovat BadRequestException, která zařídí, že se na produkčním serveru zobrazí ErrorPresenter se 404kou.
Toto riesenie sa mi velmi paci :)