2013-08-28 12 views
9

Come posso fare in modo che Laravel 4 o 5 ignori le notifiche PHP (come le notifiche di variabili non definite) e non interrompa l'intera app solo a causa di un semplice avviso PHP "indice o variabile non definito"?Laravel interrompe l'intera app sulle note di PHP

Potrei farlo su Laravel 3 impostando un array 'ignore' in config/error.php. Ma non riesco a trovare come farlo in Laravel 4 o 5.

risposta

8

Questo comportamento è dovuto all'impostazione della segnalazione degli errori a -1. Questo è il comportamento predefinito di laravel - vedi linea 14 in vendor/laravel/framework/src/illuminate/Foundation/start.php se si sta utilizzando laravel 4, o la linea 29 in vendor/laravel/framework/src/illuminate/Foundation/Bootstrap/HandleExceptions.php se si sta utilizzando laravel 5:

error_reporting(-1); // Reports everything 

gestore degli errori del laravel rispetta il livello di error_reporting, e ignorerà eventuali errori che dici a PHP di non segnalare. Vale la pena ricordare che cambiare il livello di segnalazione degli errori non è una buona idea. Ma per ignorare l'istruzione precedente è possibile aggiungere il vostro errore preferenze di reporting nel app/start/global.php (in laravel 4) o app/bootstrap/app.php (in laravel 5)

error_reporting(E_ALL^E_NOTICE); // Ignores notices and reports all other kinds 

Anche in questo caso non è una soluzione. È semplicemente quello che stai chiedendo. Tutti e eventuali errori, avvertenze, notifiche ecc. Possono e devono essere corretti.

Potete vedere tutte le costanti per la segnalazione degli errori qui: http://www.php.net/manual/en/errorfunc.constants.php

È possibile ottenere ulteriori informazioni su come utilizzare error_reporting qui: http://php.net/manual/en/function.error-reporting.php

+0

Sto usando questo per disattivare la modalità rigorosa, che credo sia un utilizzo non male. Modalità rigorosa [fa molto poco per te] (http://stackoverflow.com/a/25826279/1709587) in primo luogo e viene [rimosso dalla lingua] (https://wiki.php.net/rfc/ reclassify_e_strict) in PHP 7, insieme alla rimozione completa di due degli avvertimenti che cadevano sotto quel livello - in particolare il divieto totalmente irrazionale dei metodi statici astratti in modalità rigorosa. È una decisione discutibile su parte di Laravel per abilitare E_STRICT di default, secondo me. –

+0

aggiungendo 'error_reporting (E_ALL^​​E_NOTICE); 'in' app/bootstrap/app.php' sembra non funzionare con laravel 5.1 – Moppo

3

In laravel 5.1 è possibile aggiungere error_reporting(0) o quello che volete in \ App \ Providers \ AppServiceProvider.php avvio() metodo

+0

mi hai salvato così tante ore di lavoro aggiornando una vecchia app laravel 4.2 –

+0

@bhuBouevidya nascondendo gli errori? –

+0

@ IvankaTodorova A volte bisogna essere pragmatici. Quando una porta di una vecchia app 4.2 laravel sviluppata su php 5.4 doveva essere aggiornata per funzionare su php 7 e laravel 5.2, e c'è solo un giorno per farlo, allora fai quello che devi fare. –

0

Per laravel 5.0 Commento seguente riga

throw new ErrorException($message, 0, $level, $file, $line); 

in
vendor/laravel/quadro/src/Illuminate/Fondazione/Bootstrap/HandleExceptions.php

+1

* per favore nota *: Nel tuo prossimo 'aggiornamento del compositore' la cartella' fornitore' verrà sovrascritta e le tue modifiche spariranno. :) –

Problemi correlati