2015-07-20 12 views
7

Ho un codice che effettua chiamate in db e richieste di rete e l'ho incluso in un try/catch. Il problema è che non riesco mai a intercettare le eccezioni, e non sembrano essere delle eccezioni fatali:Come rilevare correttamente le eccezioni PHP (Laravel 5.1)

try { 
    // make db requests and network calls 
} catch (Exception $e) { 
    // handle exception 
} 

Vale a dire, ho incontrato eccezioni come questi:

[Illuminate\Database\QueryException] 
[PDOException] 
[InvalidArgumentException] 

C'è un modo per prendere queste eccezioni? Devo essere esplicito per ogni possibile tipo di oggetto di eccezione (ovvero devo creare molti try/catch) oppure esiste un metodo consigliato per rilevare eccezioni non fatali?

+0

Dove hai inserito la clausola try/catch? –

+0

È questo Laravel 4.2 o 5+? –

+0

5.1. Silly me, non ho usato un backslash prima della classe Exception. Fammi provare ... –

risposta

16

Assicurati di utilizzare correttamente gli spazi dei nomi.

Se si utilizza una classe senza fornire il suo spazio dei nomi, PHP cerca la classe nello spazio dei nomi corrente. La classe di eccezione esiste nello spazio dei nomi globale, quindi se lo fai prova/cattura in qualche codice di namespace, ad es. il controller o il modello, avrete bisogno di fare:

try { 
    //code causing exception to be thrown 
} catch(\Exception $e) { 
    //exception handling 
} 

Se lo fate come questo non c'è modo di perdere eventuali eccezioni.

caso contrario, se si ottiene un'eccezione in un codice di controllo che viene memorizzato in App \ Http \ Controller, il pescato sarà attendere App \ Http Controller \ Exception \ oggetto da buttare.

+0

Ah. Sembra un errore incurante da parte mia. Proverò questo e se funziona sceglierò questa risposta. –

+0

Ho provato intenzionalmente Apps \ MyModel per trovare un record, è stata lanciata l'eccezione di classe "App \ MyModel" non trovata. Ho provato sia FatalErrorException che \ Exception, entrambi falliti. qualche idea? –

Problemi correlati