这是控制器中的方法。它由x-editable ajax请求。
/**
* Update base info such as status.
*
* @param Request $request
* @return mixed
*/
public function postUpdateInfo(Request $request)
{
$this->middleware('recruit');
dd('passed');
$recruit = Recruit::find($request->get('pk'));
list($key, $value) = array($request->get('name'), $request->get('value'));
if ($recruit->update([$key => $value])) {
return Response::json(['success' => 1]);
}
}
在中间件中,代码如下:
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next, $permission)
{
die();
if (Entrust::can($permission)) {
return $next($request);
}
$this->belongsToMe($request, $this->instance);
return $next($request);
}
但是在chrome中,我在网络中查看响应。
那么,我认为在ajax请求中忽略了中间件?太棒了。
非常感谢。
答案 0 :(得分:1)
您应该将中间件附加到控制器的构造中:
public function __construct()
{
//assign the middleware to all the methods of the controller
$this->middleware('recruit');
}
或者,如果您只想将它附加到控制器的某些方法,请执行以下操作:
//assign the middleware only to the postUpdateInfo method
$this->middleware('recruit', [ 'only '=> 'postUpdateInfo' ] ]);
答案 1 :(得分:0)
您可以为404错误设置后备路由:
defer
然后,您可以将此方法放入控制器:
<script defer src="https://kit.fontawesome.com/593a9d194e.js"></script>
<script defer src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script defer src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<script defer src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script defer src=jquery.fancybox.min.js></script>
<script defer>
$(document).ready(function() {
$(".fancybox").fancybox()
});
</script>