Slim 3 没反应
Slim 3 no response
所以这就是我的第一个:
$app->get('/object/{id:[0-9]+}', function ($request, $response, $args) {
$id = (int)$args['id'];
$this->logger->addInfo('Get Object', array('id' => $id));
$mapper = new ObjectMapper($this->db);
$object = $mapper->getObjectById($id);
return $response->withJson((array)$object);
});
它运行良好,将整个数据库对象输出为一个不错的 JSON 字符串。
现在我在 MVC 的基础上稍微重新组织了一切,剩下的是:
$app->get('/object/{id:[0-9]+}', ObjectController::class . ':show')->setName('object.show');
它也有效,但我没有得到任何输出。如果我在 DB 对象之前放置一个 var_dump,但是我如何再次从中获得一个 JSON 字符串?
控制器来了
<?php
namespace Mycomp\Controllers\Object;
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
use Interop\Container\ContainerInterface;
use Mycomp\Models\Object;
class ObjectController
{
protected $validator;
protected $db;
protected $auth;
protected $fractal;
public function __construct(ContainerInterface $container)
{
$this->db = $container->get('db');
$this->logger = $container->get('logger');
}
public function show(Request $request, Response $response, array $args)
{
$id = (int)$args['id'];
$this->logger->addInfo('Get Object', array('id' => $id));
$object = new Object($this->db);
return $object->getObjectById($id);
}
}
正如尼玛评论所说,需要returnResponse
反对
public function show(Request $request, Response $response, array $args)
...
return $response->withJson($object->getObjectById($id));
}
为了让 Slim 向客户端发送 HTTP 响应,路由回调必须 return Slim 理解的一些数据。那一类数据,according to Slim documentation是一个PSR 7 Response
object.
这很重要,因为路由回调 returns 不一定会原封不动地发送给客户端。它可能被中间件用来在将响应发送到客户端之前提取响应。
$response
object,由 Slim 注入到您的路由回调中用于此目的。 Slim 还提供了一些辅助方法,例如“withJson”,以使用正确的 HTTP headers.
生成正确的 (PSR 7) JSON 响应
正如我在评论中所说,您需要 return 回复 object
public function show(Request $request, Response $response, array $args)
// Prepare what you want to return and
// Encode output data as JSON and return a proper response using withJson method
return $response->withJson($object->getObjectById($id));
}
所以这就是我的第一个:
$app->get('/object/{id:[0-9]+}', function ($request, $response, $args) {
$id = (int)$args['id'];
$this->logger->addInfo('Get Object', array('id' => $id));
$mapper = new ObjectMapper($this->db);
$object = $mapper->getObjectById($id);
return $response->withJson((array)$object);
});
它运行良好,将整个数据库对象输出为一个不错的 JSON 字符串。
现在我在 MVC 的基础上稍微重新组织了一切,剩下的是:
$app->get('/object/{id:[0-9]+}', ObjectController::class . ':show')->setName('object.show');
它也有效,但我没有得到任何输出。如果我在 DB 对象之前放置一个 var_dump,但是我如何再次从中获得一个 JSON 字符串?
控制器来了
<?php
namespace Mycomp\Controllers\Object;
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
use Interop\Container\ContainerInterface;
use Mycomp\Models\Object;
class ObjectController
{
protected $validator;
protected $db;
protected $auth;
protected $fractal;
public function __construct(ContainerInterface $container)
{
$this->db = $container->get('db');
$this->logger = $container->get('logger');
}
public function show(Request $request, Response $response, array $args)
{
$id = (int)$args['id'];
$this->logger->addInfo('Get Object', array('id' => $id));
$object = new Object($this->db);
return $object->getObjectById($id);
}
}
正如尼玛评论所说,需要returnResponse
反对
public function show(Request $request, Response $response, array $args)
...
return $response->withJson($object->getObjectById($id));
}
为了让 Slim 向客户端发送 HTTP 响应,路由回调必须 return Slim 理解的一些数据。那一类数据,according to Slim documentation是一个PSR 7 Response
object.
这很重要,因为路由回调 returns 不一定会原封不动地发送给客户端。它可能被中间件用来在将响应发送到客户端之前提取响应。
$response
object,由 Slim 注入到您的路由回调中用于此目的。 Slim 还提供了一些辅助方法,例如“withJson”,以使用正确的 HTTP headers.
正如我在评论中所说,您需要 return 回复 object
public function show(Request $request, Response $response, array $args)
// Prepare what you want to return and
// Encode output data as JSON and return a proper response using withJson method
return $response->withJson($object->getObjectById($id));
}