Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    158

    try catch in CodeIgniter

    Ciao a tutti!
    sto usando codeigniter per un progetto.

    Siccome sto cercando di realizzare il più ordinatamente possibile, in modo da garantire una maggiore manutenibilità stavo pensando anche alla gestione degli errori/eccezioni.

    Volevo sapere se è una buona pratica usare il costrutto try catch ad esempio tutte le volte che si fa ua chiamata al db per eseguire una query.

    E' la tecnica più corretta? Ce ne sono altre più indicate?

    avevo pensato ad una cosa del genere nel controller
    Codice PHP:
    try{
        if(!
    $this->my_model->getRecord()){
            throw new 
    Exception('ERRORE nella chiamata al db');
        } else {
            
    // fai qualcosa con i risultati ottenuti
        
    }
    } catch (
    Exception $e){
        echo 
    $e->getMessage();

    Ogni volta che utilizzo il db dovrei fare una cosa del genere?

    Grazie a tutti per i consigli anticipatamente!

    NB: l'obiettivo primario è la pulizia, l'eleganza e la manutenibilità del codice
    Ultima modifica di Alifuma92; 05-05-2016 a 13:40

  2. #2
    non ha senso quel pezzo di codice: cioè lì stai facendo una query che se non viene eseguita viene lanciata un'eccezione che poche righe sotto intercetti e stampi il messaggio di errore? E allora a che serve lanciare l'eccezione scusa? e poi se sei nel controller, il db non dovresti proprio vederlo, al limite il Model/Repository o uno strato di Service a cui delegare le operazioni col model...
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    158
    si scusami, nello scrivere il codice veloce ho inserito la chiamata al DB nel controller anche se è nel model , correggo il codice ...
    come potrei gestire questo eventuale errore?
    Non ho mai usato try catch e non so bene come utilizzarlo...

  4. #4
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Non ho mai usato try catch e non so bene come utilizzarlo...
    Quando hai bisogno di gestire una eccezione, allora la gestisci. Se ti trovi nella situazione in cui vuoi fare qualcosa di particolare in quella condizione (quando fallisci a comunicare con il db), sei più che autorizzato ad utilizzare try-catch per farlo.

    Ma nel tuo esempio questo non è il caso (catturare l'eccezione per poi non farci nulla). La tua applicazione dovrebbe essere sempre pronta a gestire una qualsiasi eccezione lanciata da una delle tue classi, dal framework, o da php stesso. Se qualcosa va male, lascia la responsabilità di catturare e gestire l'errore ad altre classi (solitamente questo è il lavoro di un framework che si rispetti). Se nessuno gestisce l'eccezione allora lo script semplicemente termina l'esecuzione in quel punto, e questo è accettabilissimo. (l'unica cosa che puoi discutere in questo caso è la necessità di catturare l'eccezione comunque per mostrare una pagina "errore 500" all'utente, invece di una pagina bianca).
    Ultima modifica di .Kurt; 05-05-2016 a 13:58

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    158
    esatto... avrei fatto una cosa del genere all'interno del catch... un redirect ad una pagina di errore... quindi dici che è meglio non utilizzarlo in questo caso?

  6. #6
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    quindi dici che è meglio non utilizzarlo in questo caso?
    CodeIgniter è un pessimo framework per chi usa OOP. Idealmente dovrebbe essere la classe che gestisce la comunicazione con il database a lanciare una eccezione quando qualcosa va storto.

    La documentazione di CI è chiara: https://ellislab.com/codeigniter/use...al/errors.html
    Usa `show_error` quando qualcosa va storto. Non lanciare eccezioni.

    codice:
    if(!$this->my_model->getRecord()) {
        show_error("Item not found", 404);
    }
    codice:
    $data = $this->db->get('table');
    if(!$data) {
        show_error("Something went wrong", 500);
    }
    Programmazione procedurale: a qualcuno piace, a qualcun'altro no. Io sono in quest'ultima categoria.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    158
    Grazie per i consigli! un'ultima cosa... quale framework PHP utilizza meglio la logica OOP secondo te? cosi almeno posso dargli un'occhiata e notare le differenze con CodeIgniter

  8. #8
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    http://symfony.com/, ma parla a bassa voce, se qualcuno sente questa conversazione scateniamo la guerra del "il framework che uso io è meglio del tuo, peasant!"

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    158
    ahahahah acqua in bocca!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.