Php 获取发送的Laravel路由器输出
我在一个API中工作,有时它会中断并发送一些不是有效JSON的数据 我想检查每个请求的返回值是否是有效的JSON 如何收听每个请求输出Php 获取发送的Laravel路由器输出,php,laravel,lumen,Php,Laravel,Lumen,我在一个API中工作,有时它会中断并发送一些不是有效JSON的数据 我想检查每个请求的返回值是否是有效的JSON 如何收听每个请求输出 可能在Laravel\Lumen\Routing\Router或Laravel\Lumen\Application上,您可以注册一个中间件,在请求发送到服务器后运行,对吗 例如: <?php namespace App\Http\Middleware; use Closure; class AfterMiddleware { public f
可能在
Laravel\Lumen\Routing\Router
或Laravel\Lumen\Application
上,您可以注册一个中间件,在请求发送到服务器后运行,对吗
例如:
<?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;
}
}
就像@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);
}
}
最后将中间件添加到我的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";
});
});
美好的如果您使用的是PHP7.3+,那么还有一种更好的方法来实现。
$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";
});
});