Есть рабочий запрос к api:
curl -X "POST" "http://localhost:8081/oauth/auth" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
--data '{"grant_type":"password", "client_id":"app", "client_secret":"", "username":"oauth@example.com", "password":"password"}'
Пытаюсь отправить его в тестах. Делаю вот так:
use Zend\Diactoros\Stream;
use Zend\Diactoros\Response;
use Zend\Diactoros\ServerRequest;
use Slim\App;
$body = new Stream('php://temp', 'r+');
$body->write(json_encode($params));
$body->rewind();
$request = (new ServerRequest())
->withHeader('Content-Type', 'application/json')
->withHeader('Accept', 'application/json')
->withUri(new Uri($uri))
->withMethod($method)
->withBody($body);
$container = $this->container();
$app = new App($container);
(require 'config/routes.php')($app, $container);
$responce = $app->process($request, new Response());
$responce->getBody()->rewind();
в ответ приходит эксепшен, что не распарсился параметр grant_type
Метод withBody() не влияет на результат метода getParsedBody(), а коде обработчика скорее всего используется именно метод $request->getParsedBody().
Попробуйте при инициализации объекта запроса установить значение распарсенного тела.
<?php
$request = (new ServerRequest())
->withHeader('Content-Type', 'application/json')
->withHeader('Accept', 'application/json')
->withUri(new Uri($uri))
->withMethod($method)
->withBody($body)
->withParsedBody($params);
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости