Ich kann Antwort Körper in Slim V3 nicht erhalten und es ist immer leer. Mein Code ist:Wie ändere ich den schlanken v3 Response Body vor und nach der Ausführung der Route?
<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
use \Slim\App as Slim;
require 'vendor/autoload.php';
$config['determineRouteBeforeAppMiddleware'] = true;
$app = new Slim(['settings' => $config]);
$mw = (function (Request $request, Response $response, callable $next) {
$response = $response->withStatus(200)->write(' before ');
$response = $next($request, $response);
$body = $response->getBody()->getContents();
$response = $response->withJson(array('data' => $body)); // output should be {"data":" Hello, User seq1 seq2 "}
return $response;
});
$mw1 = (function (Request $request, Response $response, callable $next) {
$response = $next($request, $response);
$response = $response->withStatus(200)->write(' seq1 ');
return $response;
});
$mw2 = (function (Request $request, Response $response, callable $next) {
$response = $next($request, $response);
$response->withStatus(200)->write(' seq2 ');
return $response;
});
$app->add($mw);
$app->get('/hello/{name}', function (Request $request, Response $response) {
$name = $request->getAttribute('name');
$response->getBody()->write(" Hello, $name ");
return $response;
})->add($mw1)->add($mw2);
$app->run();
Was möchte ich folgendes zu tun ist:
- Ich will nicht withJson() am Ende jeder Route hinzufügen nur meine Json und Ausgabe codieren Client (Browser). Ich möchte, dass die Middleware dies für mich erledigt, nachdem (jede) Routenausführung endet.
- Ich möchte den endgültigen Körper bekommen und es einem Array wie $ Daten ['Daten'] = $ Körper und als Json kodieren und die modifizierte Antwort zurückgeben.
P.S. Slim v2 war viel einfacher als Slim v3
$ body = $ response-> getBody() -> getContents(); ... müssen Sie den Körper zurückspulen, bevor Sie den Inhalt bekommen. – geggleto
Dieser $ body = $ response-> getBody() -> getContents(); gibt leere Zeichenfolge. Können Sie ein Beispiel für die Verwendung von Zurückspulen angeben? Ich habe versucht, zurückspulen, aber immer noch ohne Glück ... –
Sie müssen $ response-> getBody() -> rewind(); ... dann hol den Inhalt. – geggleto