Как использовать Response-> withJson внутри PHP Slim 3 Route Group? - PullRequest
0 голосов
/ 24 июня 2018

Я пытаюсь получить ответ $ внутри отдельных маршрутов, сгруппированных по общему URL. На отдельных маршрутах, не группируя их, я просто делаю это, и это работает:

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

Но когда я группирую свои маршруты, например, те, которые принадлежат разделу ADMIN, я не знаю, как получить экземпляры Request & Response, например:

$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 в качестве ответа;

И я получаю ошибку вроде:

Uncaught TypeError: Аргумент 1 передан Closure :: {closure} () должен быть экземпляр запроса, экземпляр Slim \ App, заданный

Я проследил всю страницу документации, но не работал вообще ...

1 Ответ

0 голосов
/ 25 июня 2018

Основная и большая проблема, не связанная с запросом - ответом. Правильная структура приложения для работы с 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 ]);

})
});

Если вы посмотрите на эту строку:

вернуть $ response-> withJson (['someProp' => $ pDOResult]);

Я передавал Result PDO :: FETCH_ASSOC , и что-то не так с конфигурациями наборов символов: данные базы данных содержат специальные символы, которые приводили к сбою анализатора JSON, поэтому я исправил это с помощью этой строки, сразу после $ db-> connect ();

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