我正在构建一个应用程序,我使用 laravel5 作为 webAPI。当 webAPI 处于维护模式时,我想向 app 返回一个 json 错误,我将在 app 中获取状态代码以显示合适的消息。
我出于某种原因重写了 laravel CheckForMaintenanceMode 并将其注册到内核中。
我写的
if ($this->app->isDownForMaintenance()) {
$ip = $request->getClientIp();
$allowIp = "111.222.333.444";
if ($allowIp != $ip) {
return response()->json(['error' => "Maintenance!!"], 503);
}
}
return $next($request);
Run Code Online (Sandbox Code Playgroud)
但是我在应用程序方面什么也没有。我无法收到消息,状态....
我写了return response()->json(['error' => "errormessage"], 422);和控制器一样的代码,我可以在应用程序中获取 message.status.. 但我不能在中间件中做同样的事情。
为什么?怎么做?
这有效:
if ($this->app->isDownForMaintenance()) {
$ip = $request->getClientIp();
$allowIp = "111.222.333.444";
if ($allowIp != $ip) {
return response(['Maintenance'], 503);
}
}
return $next($request);
Run Code Online (Sandbox Code Playgroud)
并且不在内核全局HTTP中间件中注册中间件而是将其放在路由(api.php)中,例如:
Route::group(['middleware' => 'maintenance'], function(){******}
Run Code Online (Sandbox Code Playgroud)
我真的不知道为什么,但这对我有用。
完整示例
public function handle($request, Closure $next)
{
if($request->token == "mytoken")
return $next($request);
else return response(['Token mismatch'],403);
}
Run Code Online (Sandbox Code Playgroud)
解释
中间件的响应
must be an instance of Symfony\Component\HttpFoundation\Response
所以,要返回 json,你必须这样做
return response(['Token mismatch'],403);
Run Code Online (Sandbox Code Playgroud)
中间件必须注册在Kernel.php
| 归档时间: |
|
| 查看次数: |
7670 次 |
| 最近记录: |