2016-01-02 41 views
7

sto ottenendo questo problema: http://pastebin.com/B5MKqD0Tlaravel artigianale migrazione sicuro

PHP Fatal error: Uncaught TypeError: Argument 1 passed to Illuminate\Exception\WhoopsDisplayer::display() must be an instance of Exception, instance of ParseError given

Ma non ho idea di come risolvere il problema, Sono nuovo di laravel e compositore ecc

Sto usando laravel 4.0 (perché sto seguendo e vecchio tutorial del mio amico)

+0

se sei soddisfatto della mia risposta qui sotto, puoi accettarlo :) –

risposta

16

ParseErrorwas introduced in PHP 7. In altre parti si utilizza Laravel 4 che non supporta PHP7.

laravel 5.1 è la prima versione di laravel per supportare PHP 7.

Quindi, ci sono 2 soluzioni:

  1. aggiornamento laravel a> = 5.1 (consiglio vivamente questo!)
  2. downgrade PHP a 5. *

per saperne di più eccezioni throwable in PHP7: 0.123.182,80467 milioni

+0

come effettuare il downgrade a php 5? –

+0

dipende dal tuo sistema operativo, specificalo così posso aiutarti. –

+0

Sto usando windows 10 –

5

Trovato un bel work-around per disabilitare il gestore degli errori di laravel. Aggiungi questo alla parte superiore della vostra app/config/local/app.php (a destra prima l'array di ritorno (...):

set_error_handler(null); 
set_exception_handler(null); 
+0

Questa è un'ottima soluzione, se non vuoi o non puoi effettuare il downgrade a PHP 5. *, così come un aggiornamento a Laravel 5. * è troppo lavoro –

0

C'è un altro approccio in cui si può avvolgere il gestore di eccezioni laravel con il proprio, convertire il nuovo tipo di errore a un'istanza di eccezione prima di passare di nuovo a laravel

Creare la classe di sotto da qualche parte nella vostra applicazione:.

namespace Some\Namespace; 

use Error; 
use Exception; 

class ErrorWrapper 
{ 
    private static $previousExceptionHandler; 

    public static function setPreviousExceptionHandler($previousExceptionHandler) 
    { 
     self::$previousExceptionHandler = $previousExceptionHandler; 
    } 

    public static function handleException($error) 
    { 
      if (!self::$previousExceptionHandler) { 
       return; 
      } 

      $callback = self::$previousExceptionHandler; 

      if ($error instanceof Error) { 
       $callback(new Exception($error->getMessage(), $error->getCode())); 
      } 
      else { 
       $callback($error); 
      } 
     } 
} 

all'inizio del config/app.php, è possibile registrare il wrapper class come gestore degli errori predefinito:

$existing = set_exception_handler( 
    ['Some\Namespace\ErrorWrapper', 'handleException']); 

ErrorWrapper::setPreviousExceptionHandler($existing);