Получить отправленный выход Laravel Router - PullRequest
0 голосов
/ 25 января 2019

Я работаю в API, и иногда он ломается и отправляет некоторые данные, которые не являются допустимыми JSON.

Я хочу проверить, является ли возвращаемое значение каждого запроса действительным JSON.

Как мне прослушивать каждый запрос на вывод ?

Может быть на Laravel\Lumen\Routing\Router или на Laravel\Lumen\Application.

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Как сказал @Mozammil, просто нужно промежуточное программное обеспечение для этого. Следи за тем, как это ощущается в финале.

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Response;
use Mockery\Exception;

class AfterMiddleware
{
    public function handle($request, Closure $next)
    {
        /** @var Response $response */
        $response = $next($request);

        // Response content are a JSON?
        if (!$this->isJson($response->content())){
            // Not a JSON!!
            // Log everywhere
        }

        return $response;
    }

    private function isJson($string) {
        json_decode($string);
        return (json_last_error() == JSON_ERROR_NONE);
    }
}

Я использую Люмен , затем я добавил его к bootstrap/app.php:

$app->routeMiddleware([
    'auth' => App\Http\Middleware\Authenticate::class,
    'afterMiddleware' => App\Http\Middleware\AfterMiddleware::class
]);

И наконец добавил промежуточное ПО для моих api маршрутов:

$router->group([
    'middleware' => 'afterMiddleware',
    'prefix' => 'api'
], function () use ($router) {
    $router->get('/', function () use ($router) {
        return response(["success"=>true]);
    });

    $router->get('/bug/', function () use ($router) {
        return "I'm not a JSON and it will catch on AfterMiddleware handle";
    });
});
0 голосов
/ 25 января 2019

Вы могли бы зарегистрировать Middleware, которое запускается после отправки запроса на сервер, верно?

Например:

<?php

namespace App\Http\Middleware;

use Closure;

class AfterMiddleware
{
    public function handle($request, Closure $next)
    {
        $response = $next($request);

        // Perform validation action on $response? 

        return $response;
    }
}
...