2017-10-31 3 views
1
Handhabung

In meinem Controller, ich verlängere die Controller-Klasse statt ActiveControllerYii2 Anfänger. Anzeige REST Ausnahme

Ich habe eine einfache actionIndex() -Methode:

public function actionIndex(){ 

    return json_encode(["text" => "some text"]); 
} 

Wenn ich auf die bestimmte Route in Browser, in dem Debugger Ich sehe, dass diese Funktion ausgeführt wird (der Haltepunkt stoppt innerhalb der Funktion), aber ich bekomme 500 Statuscode (Interner Serverfehler). Wie kann ich die Ursache des Fehlers finden? Ich habe die Methode actionError() implementiert, aber sie wird nicht ausgeführt.

public function actionError() { 
    $exception = Yii::$app->errorHandler->exception; 
    if ($exception !== null) { 
     return $this->render('error', ['exception' => $exception]); 
    } 
} 

Wenn ich die Logik des Actionerror() -Methode in der actionIndex() setzen, die $ exception Variable ist null

Der einzige Ausgang ich erhalte, ist:

{ 
name: "PHP Warning", 
message: "Expected array for frame 0", 
code: 2, 
type: "yii\base\ErrorException", 
file: "Unknown", 
line: 0, 
stack-trace: [] 
} 

aber es ist Warnung, kein Fehler. Kann dies den Statuscode 500 verursachen?

Wie kann ich den Fehler bekommen? Vielen Dank!

+0

Was ist Ihre genaue Version von Yii2? Dies scheint mit einer Version von Yii2 zu korrelieren, die auf PHP 7 mit XDebug läuft. – Mat

+0

Ja, ich habe xdebug aktiviert. Kann es den Antwortstatus 500 verursachen? die Version von Yii ist 2.0.5 –

Antwort

1

Nach diesem Thread https://github.com/yiisoft/yii2/issues/11120 dies zu Xdebug für Yü zusammenhängt 2 < 2.0.9. Wenn eine Ausnahme behandelt wird, ändert XDebug die Ausnahme und Yii2 konnte nicht korrekt damit umgehen.

So mehrere mögliche Lösungen hier

  • Die beste Idee ist Yii2 auf eine Version> = 2.0.9
  • Auch aktualisieren sould Sie die Quelle der Ausnahme korrigieren (die Warnung). Es ist nie eine gute Idee, Warnungen zu haben. Es kann einige weitere Probleme verbergen.
  • Und als Workaround können Sie XDebug deaktivieren. Es ist sehr nützlich während der Entwicklung, muss aber in allen Fällen in der Produktion deaktiviert werden.
+0

wie Sie die Warnungen deaktivieren? –

+1

Ich meine nicht, die Warnungen zu deaktivieren. Korrigieren Sie einfach den Code, der die Warnung verursacht. Aber wenn Sie es wirklich wollen, können Sie die Warnungen noch deaktivieren, indem Sie das 'error_reporting' in Ihrer php.ini auf' E_ALL & ~ E_WARNING & ~ E_NOTICE' setzen. Siehe http://php.net/manual/en/function.error-reporting.php – Mat

0

Ich weiß nichts über Ihren Fehler, aber es gibt im Allgemeinen keine Notwendigkeit, eine Antwort als json codiert zurückzugeben. Yii prüft den Accept-Header der Anfrage und passt die Ausgabe entsprechend an. In Ihrem Fall würde verwende ich nur:

public function actionIndex() 
{ 
    return ["text" => "some text"]; 
} 

Möglicherweise könnte es auch Ihre Fehler beheben ...

+0

Ich werde die Frage jetzt aktualisieren. Ich habe es auch versucht und es ist das gleiche –