uživatelský delete,update a insert záznamů z db
- Oggy
- Člen | 306
Mám takový spíše teoretický dotaz..na „best practise“:
kde ..na jaké úrovni – model nebo spíše control? ošetřujete chyby a
vyjímky, které databáze vrací..
je k tomu někdě nějaký materiál?
Teoretický příklad:
každá kategorie může mít více podkategorií v každé kategorii může
být více článků. Článek patří jen k jedné kategori.
Uživateli backendu nabízíme tlačítko smaž Kategorii .. a nyní bychom ho chtěli informovat, že smazáním kategorii přijde o podkategorie a jejich podkategorie..atd.. a články mazaných kategorií..
jak nejlépe na to?
- Jakub Lédl
- Člen | 55
Podíval bych se na příklad CD-collection z distribuce, nebo sem.
- Ohledně vyjímek bych řekl, že nejlogičtější je použít
$application->catchExceptions = TRUE
a ErrorPresenter (ukázka vNette/tools/Skeleton
). V development módu samozřejmě vyjímky vůbec nezachycovat. - Nechápu já. Vždyť mazání záznamů v tabulkách s
ON DELETE CASCADE
(příp. nulování v tabulkách s `ON DELETE SET NULL() si databáze řeší sama…
Editoval Jakub Lédl (21. 1. 2010 13:49)
- Oggy
- Člen | 306
Jakub Lédl napsal(a):
Podíval bych se na příklad CD-collection z distribuce, nebo sem.
- Ohledně vyjímek bych řekl, že nejlogičtější je použít
$application->catchExceptions = TRUE
a ErrorPresenter (ukázka vNette/tools/Skeleton
). V development módu samozřejmě vyjímky vůbec nezachycovat.- Nechápu já. Vždyť mazání záznamů v tabulkách s
ON DELETE CASCADE
(příp. nulování v tabulkách s `ON DELETE SET NULL() si databáze řeší sama…
- ok.. díky
- no samozřejmě.. mě šlo o to.. aby uživatel o tom věděl, abychom ho upozornil, že když chce smazat jednu kategorii, tak smázne všechny podkategorie a jejich články ..například.
- Jakub Lédl
- Člen | 55
- OK, takže požadované chování je zobrazit to varování pouze když má ta dotyčná kategorie nějaké články či podkategorie?
Tak co třeba takhle:
<?php
class ArticlePresenter extends BasePresenter {
...
public function renderDelete($id = NULL) {
/* jakýmkoli způsobem zjistíme, jestli právě mazaný článek
vůbec existuje */
if (!$exists ) {
$this->flashMessage('...', 'error');
$this->redirect('default');
} /* pokud existuje, zjistíme, zda má nějaký obsah
a dáme šabloně vědět, zda renderovat upozornění
({if $hasChildren}...{/if} vyrenderuje se šablona,
která bude někde obsahovat značku {control deleteForm}
a samotné smazání bude až po odeslání formuláře,
jelikož destruktivní operace by se nikdy neměly
provádět pomocí HTTP GET. */
}
protected function createComponentDeleteForm() {
...
}
}
?>
Pokud používáš Dibi, tak by se pro všechno to zjišťování a ověřování dal použít DibiDataSource (zde).
Jinak ber mě s rezervou, jsem nettista-začátečník, ale toto se mi zdá asi jako nejlepší řešení.
Editoval Jakub Lédl (21. 1. 2010 14:35)