uživatelský delete,update a insert záznamů z db

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Oggy
Člen | 306
+
0
-

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?

Oggy
Člen | 306
+
0
-

trošku to tu zapadlo.. takže jsem se asi špatně zeptal:-)

  1. kdy ošetřujete vyjímky z databáze? na úrovni controlu nebo modelu?
  2. jak ošetřujete mazání cizích klíčů? ..které mají nastavenou on delete casacde?

Děkuju za postřehy

Jakub Lédl
Člen | 55
+
0
-

Podíval bych se na příklad CD-collection z distribuce, nebo sem.

  1. Ohledně vyjímek bych řekl, že nejlogičtější je použít $application->catchExceptions = TRUE a ErrorPresenter (ukázka v Nette/tools/Skeleton). V development módu samozřejmě vyjímky vůbec nezachycovat.
  2. 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
+
0
-

Jakub Lédl napsal(a):

Podíval bych se na příklad CD-collection z distribuce, nebo sem.

  1. Ohledně vyjímek bych řekl, že nejlogičtější je použít $application->catchExceptions = TRUE a ErrorPresenter (ukázka v Nette/tools/Skeleton). V development módu samozřejmě vyjímky vůbec nezachycovat.
  2. 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…
  1. ok.. díky
  2. 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
+
0
-
  1. 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)