Ich versuche, ein Array der Antwort in das JSON-Format zu konvertieren. Ich habe alle Antworten ausprobiert, die auf SO und anderen Websites wie veröffentlicht wurden web1,web2 Hinzufügen header('Content-Type: application/json') und dann echo json_encode($data,JSON_PRETTY_PRINT);
Aber ich bekomme immer die Ausgabe im Textformat. Kann mir jemand bei der Lösung helfen.
Helferklasse:
public static function renderJSON($data) {
header('Content-Type: application/json');
echo json_encode($data,JSON_PRETTY_PRINT);
}
Mein Controller:
if ($model->login()) {
$user = User::findByUsernameOrEmail($request->post('username'));
$userArray = ArrayHelper::toArray($user);
Helpers::renderJSON($userArray);
Ich habe versucht, die zu drucken userArray und es sieht so aus:
in der Aktion des Controllers irgendwo zuvor return.
Danke Bizley. Es funktioniert. Kann ich es in die hinzufügen helper class Vor dem echo -Anweisung, da ich diese Funktion an verschiedenen Stellen aufrufen werde.
– Lieferavis
16. Januar 2017 um 11:16 Uhr
Zuallererst sollten Sie return Daten und nicht echo es. Es kann überall sein, solange es die aktuelle Reaktion beeinflusst.
– Bizley
16. Januar 2017 um 11:18 Uhr
Ok Bizley. Ich werde es so ändern, dass es anstelle von echo zurückkehrt (aber wenn ich es auf return ändere, erhalte ich ein leeres Ergebnis. Ich überprüfe den Code auf postman und es gibt nichts in der Ausgabe). Und ich habe die Erklärung hinzugefügt behaviors() Methode im Controller
– Lieferavis
16. Januar 2017 um 11:22 Uhr
Beim Hinzufügen \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; Sie müssen keine Hilfsklassen verwenden, nicht einmal $userArray = ArrayHelper::toArray($user);versuchen Sie einfach zurückzukehren $user
– marschieren
16. Januar 2017 um 16:26 Uhr
@ASN siehe meine Antwort unten
– Jasar Arafath
8. August 2017 um 11:14 Uhr
Andreas Hinderberger
Seit Yii 2.0.11 gibt es eine dedizierte asJson() -Methode, um eine Antwort im JSON-Format zurückzugeben. Laufen:
return $this->asJson($array);
in Ihrer Controller-Aktion.
Wenn Sie einen großen Teil des HTML zurückgeben, funktioniert es sehr langsam, ich kann nicht verstehen, warum
– Oleg
4. März um 10:16
Versuchen Sie, das Debuggen vollständig zu deaktivieren, und sehen Sie, ob dies die Ladezeit verbessert. Ich habe mehrere Yii2-Projekte, die Probleme mit der Ladezeit hatten, und durch das schrittweise Deaktivieren von Modulen/Komponenten stellte ich fest, dass es die Yii2-Debug-Komponente war, die die gesamte Anwendungsserverseite verlangsamte.
– Andreas Hinderberger
4. März um 14:50 Uhr
Fügen Sie dies einfach im Controller hinzu
public function beforeAction($action)
{
\Yii::$app->response->format = Response::FORMAT_JSON;
return parent::beforeAction($action);
}
Danke, beste Lösung für Apps mit ein paar API-Controllern zusätzlich zur Basis-App
– Urgotto
6. August 2021 um 7:39 Uhr
use JsonException;
use yii\web\NotFoundHttpException;
use yii\base\InvalidConfigException;
use yii\web\Response;
use yii\web\JsonResponseFormatter;
/**
* @param int $id
* @return string[]
* @throws InvalidConfigException
* @throws JsonException
* @throws NotFoundHttpException
*/
public function actionViewJson(): array
{
Yii::$app->response->format = Response::FORMAT_JSON;
Yii::$app->response->formatters = [
Response::FORMAT_JSON => [
'class' => JsonResponseFormatter::class,
'prettyPrint' => true
]
];
return ['key' => 'val'];
}
use yii\helpers\Json;
use yii\web\Response;
Fügen Sie zuerst die beiden obigen Zeilen oben in Ihrem Controller ein, und fügen Sie dann in einer Ihrer Controller-Aktionen direkt vor den return-Anweisungen die folgenden ein