捕获重定向并返回json消息(如果$request->;Laravel中的ajax()
我正在寻找一种在Laravel中提交表单后处理重定向的方法。我的控制器方法(存储/更新)的末尾有一行:捕获重定向并返回json消息(如果$request->;Laravel中的ajax(),ajax,forms,laravel,laravel-routing,laravel-middleware,Ajax,Forms,Laravel,Laravel Routing,Laravel Middleware,我正在寻找一种在Laravel中提交表单后处理重定向的方法。我的控制器方法(存储/更新)的末尾有一行: return redirect()->route('admin.templates.edit', ['id' => $template->id]); 如果表单是通过ajax提交的,我想截取此重定向(如果可能)并返回一条json消息: 到目前为止,我必须在每种方法中都写下这一点: if (request()->ajax()) { return [
return redirect()->route('admin.templates.edit', ['id' => $template->id]);
如果表单是通过ajax提交的,我想截取此重定向(如果可能)并返回一条json消息:
到目前为止,我必须在每种方法中都写下这一点:
if (request()->ajax()) {
return [
'redirect' => route('admin.templates.edit', ['id' => $template->id])
];
}
return redirect()->route('admin.templates.edit', ['id' => $template->id]);
如果请求是通过ajax发出的,有没有办法编写“正常”重定向并封装在json中?也许可以使用中间件?将中间件用于在中拦截Ajax请求所需的所有路由。您可以几乎完全按照现有的方式使用代码:
if (request()->ajax()) {
return [
'redirect' => route('admin.templates.edit', ['id' => $template->id])
];
}
return redirect()->route('admin.templates.edit', ['id' => $template->id]);
并从中间件执行相应的操作
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if (request()->ajax()) {
return response()->redirect(route('admin.templates.edit', ['id' => $template->id]));
}
return $next($request);
}
我为
RedirectResponse
编写了一个宏,用于处理ajax,您可以将其添加到AppServiceProvider
RedirectResponse::macro('withAjax', function ()
{
/* @var $this RedirectResponse */
return request()->ajax() ? ['redirect' => $this->getTargetUrl()] : $this;
});
现在在控制器中,您可以简单地使用
return redirect()->back()->macroCall('withAjax',[])代码>