wie Json encode in yii2?
Versuch zu Kodieren von json und erhalten 400: Bad Request
im yii2
. Ich bin versucht zu Encoden Rest-client, aber es funktioniert nicht richtig.
<?php
namespace app\controllers;
use Yii;
use yii\filters\AccessControl;
use yii\web\Controller;
use yii\filters\VerbFilter;
use app\models\TblUserRegistration;
class UserController extends Controller
{
public function actionRegister()
{
$model = new TblUserRegistration();
$username = $_POST['username'];
echo json_encode($username);
}
}
?>
Fehler Bild.
Fehler Bild
- set-Antwort-format zu
\yii\web\Response::FORMAT_JSON;
- Insane hat Recht. Verwenden Sie \ \ yii\web\Antwort::FORMAT_JSON;
- add hidden-Feld im Formular für die csrf -: ` <input type="hidden" name="<?= Yii::$app->Anfrage->csrfParam; ?>" value="<?= Yii::$app->Anfrage->csrfToken; ?>" />`
- Eigentlich möchte ich, dass im Voraus, Rest-client in google chrome, Weil ich verwenden möchten, die in web-service.Also ich habe keine form. Ich brauche nur Reine json-codierte Daten.
- Legen Sie dann
\Yii::$app->response->format = Response::FORMAT_JSON;
sollte für Sie arbeiten. - konfigurieren json-parser für json-Ausgabe in der Konfiguration.
- Ich denke, ContentNegotiator wird der trick für eine Aktion. Ich meine, vielleicht hat er keine Bedürfnisse, um es Global. Ich denke, es ist auch ein csrf-Problem wie bereits von @suibber, die Würfe der 400-Fehler. Einstellung der controller ist öffentliches Eigentum
$enableCsrfValidation
auf false ein, wie es in\yii\rest\Controller
kann das Problem beheben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lösung 1: Im Falle dass, wenn alle controller-Aktionen liefert json-Sie können auch prüfen extanding yii\rest\Controller statt yii\web\Controller :
HINWEIS: Sie können auch mit ActiveController die sich yii\rest\Controller (siehe rest docs) wenn Sie in der Handhabung von CRUD-Operationen.
Lösung 2: Einen anderen Ansatz bei der Erweiterung yii\web\Controller ist die Verwendung yii\Filter\ContentNegotiator. Beachten Sie, dass die Einstellung
$enableCsrfValidation
zu false, kann verbindlich sein hier, wie es ist, erklärte in seiner Verwandte docs :Den obigen code kann umgeschrieben werden auf diese Weise :
ich denke 400 haben nichts zu tun mit die Funktionen json_encode
google "yii2 csrf" für weitere Informationen.
JS:
hinzufügen oder scrf im Blick:
form:
JS:
meta:
JS: