2013-06-16 24 views
5

Sembra che non sia possibile rilevare gli errori da soli, per ottenere l'output dell'errore di laravel 4.Laravel 4 - Errori di cattura

Per esempio se provo:

$databaseConfig = Config::get('database.connections.mysql'); 
    $connect = mysql_connect($databaseConfig['host'], $databaseConfig['username'], $databaseConfig['password']); 
    if (!$connect) 
    { 
     return 'error'; 
    } 

Se si verifica un errore non avrò l ' "errore", invece laravel mi mostra l'eccezione (su quel sito arancione).

Lo stesso se si va avanti e provare un

try { 
    $pdo = DB::connection('mysql')->getPdo(); 
} 
    catch(PDOException $exception) { 
    return Response::make('Database error! ' . $exception->getCode()); 
} 

Esiste un modo per farlo?

risposta

16

Il codice che hai fornito dovrebbe funzionare bene. Se metto questo nel mio routes.php, vedo la stringa di errore prevista (senza l'arancione).

Route::get('error', function() { 
    try 
    { 
     $pdo = DB::connection('mysql')->getPdo(); 
    } 
    catch(PDOException $exception) 
    { 
     return Response::make('Database error! ' . $exception->getCode()); 
    } 
    return 'all fine'; 
}); 

Che cosa potrebbe accadere qui, è che il tuo PDOException non viene catturato. Prova ad aggiungere una barra rovesciata a PDOException in modo da essere sicuro che sia quella definita nella root e non nello spazio dei nomi corrente.

Inoltre, provare a eseguire il codice direttamente dal file routes.php e vedere se si comporta allo stesso modo.

+0

Grazie mille. Era il problema del Namespace che hai segnalato. Non sapevo che funziona così. Grazie ancora. – Michael

+0

Nessun problema, i problemi con i nomi dei nomi ci hanno colto tutti a un certo punto ;-) – DerLola

+0

Sì, grazie per l'attenzione sul problema dello spazio dei nomi. –

2

Date un'occhiata a questa pagina: http://laravel.com/docs/errors

esempio rapida:

App::error(function(PDOException $e) 
{ 
    Log::error($exception); 

    return Response::make('Database error! ' . $exception->getCode()); 
}); 
+0

Bene, è necessario aggiungere questo al global.php, ma non è quello che voglio. Ad esempio, se si desidera verificare se i dati del database sono corretti, durante l'avanzamento dell'installazione, si desidera fornire un errore personalizzato. Un gestore di errori globale non mi aiuterà in questo caso. – Michael

+0

Andrea ha ragione. Puoi personalizzare l'errore del messaggio quando lo lanci. – frenus

+0

Come? Non voglio solo personalizzare il messaggio, a volte voglio mostrarlo su una vista personalizzata, a volte su una pagina blanp, ecc. Come posso farlo? – Michael

1
App::error(function(Exception $exception) { 
echo '<pre>'; 
echo 'MESSAGE :: '; 
    print_r($exception->getMessage()); 
echo '<br> CODE ::'; 
    print_r($exception->getCode()); 
echo '<br> FILE NAME ::'; 
    print_r($exception->getFile()); 
echo '<br> LINE NUMBER ::'; 
    print_r($exception->getLine()); 
die();// if you want than only 
}); 

inserire questo codice nel file di percorso ...
otterrete MESSAGGIO DI ERRORE con nome del file e ERROR LINE
tutti i maggior parte degli errori saranno coperti.