【问题标题】:Slim Framework 4 getParsedBody Always returns nullSlim Framework 4 getParsedBody 总是返回 null
【发布时间】:2021-04-09 07:44:10
【问题描述】:

我正在测试 Slim Framework 4,当我使用 getParsedBody 方法通过 POST 提交 JSON 时,我似乎无法检索任何数据,它总是导致 NULL。这是我的终点:

<?php
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;

$app->post('/prueba', function (Request $request, Response $response, $args) {
    $data = $request->getParsedBody();
    $response->getBody()->write(json_encode($data));
    return $response->withHeader('Content-Type', 'application/json')
        ->withStatus(200);
});

根据一些文档,我添加了 BodyParsing 中间件:

<?php

use Dotenv\Dotenv;
use Slim\Views\Twig;
use Slim\Factory\AppFactory;
use Slim\Views\TwigExtension;
use Slim\Psr7\Factory\UriFactory;
use Dotenv\Exception\InvalidPathException;

require_once __DIR__ . '/../vendor/autoload.php';

try {
    (new Dotenv(__DIR__ . '/../'))->load();
} catch (InvalidPathException $e) {
    //
}

$container = new DI\Container();

AppFactory::setContainer($container);

$app = AppFactory::create();

$app->addBodyParsingMiddleware();

$app->addRoutingMiddleware();

$app->addErrorMiddleware(true, true, true);

$container->set('settings', function () {
    return [
        'app' => [
            'name' => getenv('APP_NAME')
        ],
        'db' => [
            'driver' => getenv('DB_DRIVER'),
            'host' => getenv('DB_HOST'),
            'database' => getenv('DB_NAME'),
            'username' => getenv('DB_USER'),
            'password' => getenv('DB_PASS'),
            'charset' => getenv('DB_CHARSET'),
            'collation' => getenv('DB_COLLATION'),
            'prefix' => ''
        ]
    ];
});

$capsule = new \Illuminate\Database\Capsule\Manager();
$capsule->addConnection($container->get('settings')['db']);
$capsule->setAsGlobal();
$capsule->bootEloquent();

$container->set('view', function ($container) use ($app) {
    $twig = new Twig(__DIR__ . '/../resources/views', [
        'cache' => false
    ]);

    $twig->addExtension(
        new TwigExtension(
            $app->getRouteCollector()->getRouteParser(),
            (new UriFactory)->createFromGlobals($_SERVER),
            '/'
        )
    );

    return $twig;
});

require_once __DIR__ . '/../routes/api.php';

这是我要发送的请求:

curl --location --request POST 'http://localhost:80/prueba' \
--header 'Content-type: application/json' \
--data-raw '{"name": "Rob", "country": "UK"}'

我进行了一些调试并验证了中间件正在处理请求,但到目前为止,我无法让它返回除 null 之外的任何内容。也看了看,似乎没有任何报告的问题有明确的解决方案。

【问题讨论】:

    标签: php slim slim-4


    【解决方案1】:

    没关系,是骨骼不足导致的问题,用slim的官方骨骼解决了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-15
      • 2013-05-02
      • 1970-01-01
      • 2014-03-04
      • 2016-11-02
      • 2014-05-06
      • 2012-06-05
      • 2014-05-30
      相关资源
      最近更新 更多