我希望在返回响应的地方覆盖laravel。然后我想检测状态代码(200或301),如果请求是ajax。如果状态代码是200并且请求是ajax我想返回自定义html。就像是 :
protected function returnResponse($statusCode, $html, $redirectUrl){
if($statusCode == 200 && isAjax()){
return parent::returnResponse($customStatusCode, $customHtml, $customRedirectUrl);
}
return parent::returnResponse($statusCode, $html, $redirectUrl);
}
EDITED: 我有这个:
class SomeMiddleware
{
public function handle($request, Closure $next)
{
// do before
$request = $next($request);
//do after
return $request;
}
}
但是如何检测当前响应是否重定向?
答案 0 :(得分:1)
如果您想检查最终响应并可能返回备用响应,那么让我们编写一个简单的中间件。
听起来你想在最后进行检查,在之后构建了默认响应(所以你可以检查它)。所以我们将这样开始:
// First get the default response
$response = $next($request);
我们的$response
变量现在将保留Laravel即将响应的响应。
如果您想查看响应是否为重定向,您可以轻松检查RedirectResponse
实例:
$isRedirect = $response instanceof \Illuminate\Http\RedirectResponse;
您可以非常简单地测试原始请求是否为ajax:
$isAjax = $request->ajax();
如果您现在想要返回一个不同的响应,而不是您提交的响应,我将使用简单的response()
辅助方法:
return response($content, $status);
把它放在一起,我相信这大致是你正在寻找的东西:
use Illuminate\Http\RedirectResponse;
class HijackMiddleware
{
public function handle($request, Closure $next)
{
$response = $next($request);
if($request->ajax() && $response instanceof RedirectResponse) {
return response("This is a <strong>different and custom</bold> response");
}
return $response;
}
}
答案 1 :(得分:1)
我的最终解决方案:
<?php
namespace App\Http\Middleware;
use Closure;
use Response;
use Request;
class AjaxForm
{
public function handle($request, Closure $next, $guard = null)
{
$response = $next($request);
if(Request::ajax() && $response->status() == 301) {
return (Response::make($response->getTargetUrl(), '200'));
}
return $response;
}
}