【问题标题】:How to use Response->withJson inside PHP Slim 3 Route Group?如何在 PHP Slim 3 路由组中使用 Response->withJson?
【发布时间】:2018-12-03 10:59:43
【问题描述】:

我试图在按公共 URL 分组的单个路由中获取 $response。在单独的路线中,没有对它们进行分组,我只是这样做,它可以工作:

$app->get('/news', function($req, $resp) use ($app) {
      return $resp->withJson([ 
         "someProp" => $someValue,
       ])->withStatus(200);
}

但是当我对路由进行分组时,例如属于 ADMIN 部分的路由,我不知道如何获取请求和响应实例,如下所示:

$app->group('/admin' function() {
     $this->get('/dashboard', function(Request $req, Response $resp) {
         return $resp->withJson(["property" => $someValue]);
});
});

当我使用 $resp 时应用程序崩溃,但例如,如果我将其更改为简单的“echo”,它会返回纯文本,表明它可能没有正确获取响应对象。

我已经导入了正确的库:

使用 \Psr\Http\Message\ServerRequestInterface 作为请求;

使用\Psr\Http\Message\ResponseInterface 作为响应;

我收到一些错误,例如:

未捕获的类型错误:传递给 Closure::{closure}() 的参数 1 必须是 一个Request的实例,给定的Slim\App实例

我已经关注了所有文档页面,但根本没有工作......

【问题讨论】:

    标签: php rest grouping httpresponse slim


    【解决方案1】:

    主要和大问题,与请求 - 响应无关。当您必须对一些路由进行分组时,使用 Slim Framework ^3.0 使用的正确应用程序结构如下:

    // First inject this
    use \Psr\Http\Message\ServerRequestInterface as Request;
    use \Psr\Http\Message\ResponseInterface as Response;
    
    $app->group('/admin', function() use ($app){
    
    
        $app->get('/secciones/activas', function ( Request $request, Response $response ){
        //return response here
    
        return $response->withJson(['someProp' => $pDOResult ]);
    
    })
    });
    

    如果你看这一行:

    return $response->withJson(['someProp' => $pDOResult ]);

    我传递了一个 Result PDO::FETCH_ASSOC 集,并且字符集配置有问题,数据库数据包含导致 JSON 解析器崩溃的特殊字符,所以我用这一行修复了它,紧接在 $db->connect();

    之后
    $db->exec("SET NAMES 'utf8';");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-30
      • 1970-01-01
      • 2017-10-03
      • 1970-01-01
      • 2015-11-16
      • 1970-01-01
      相关资源
      最近更新 更多