laravel - Laravel 中间件中的多个条件
问题描述
我有一个这样的中间件:
class HasBilling {
public function handle($request, Closure $next) {
$user_profile = UsersProfile::where('user_id', Auth::id())->first();
if (!is_object($user_profile) && !\Auth::user()->hasPermissionTo('soy-agente') && !\Auth::user()->hasPermissionTo('soy-agente_inversor')) {
return redirect()->route('myaccount.facturacion.ver')->with('error', 'No posees datos de facturación. Antes de usar algunas funciones como facturación, publicidad, merkado, tarifas... debes rellenar los datos.');
}
if(is_object($user_profile) && is_null($user_profile->validate)){
return redirect()->route('myaccount.facturacion.ver')->with('error', 'Tus datos de facturación están pendiente de validar');
}
if(is_object($user_profile) && $user_profile->validate == 2){
return redirect()->route('myaccount.facturacion.ver')->with('error', 'Tus datos de facturación han sido rechazados.');
}
if(!is_null(\Auth::user()->activity) && \Auth::user()->activity == "empresa"){
$autorizado = UsersProfileAutorizado::find($user_profile->id);
if(!is_object($autorizado)){
return redirect()->route('myaccount.autorizado.ver')->with('error', 'No posees ningún autorizado. Al ser una empresa, antes de usar algunas funciones como la facturación o la publicidad debes rellenar los datos de autorizado.');
}
if(is_object($autorizado) && is_null($autorizado->validate)){
return redirect()->route('myaccount.autorizado.ver')->with('error', 'Tu autorizado está pendiente de validar.');
}
if(is_object($autorizado) && $autorizado->validate == 2){
return redirect()->route('myaccount.autorizado.ver')->with('error', 'Tu autorizado ha sido rechazado.');
}
}
return $next($request);
}
}
这样做的问题是它检查第一个 IF,但其他的被省略了。
中间件之所以有效,是因为第一个 if 总是检查它,而其余的则“忽略”它们。
我该如何解决?
解决方案
您可以将错误存储在数组中,并在方法结束时重定向。
class HasBilling {
public function handle($request, Closure $next) {
$errors = [];
$user_profile = UsersProfile::where('user_id', Auth::id())->first();
if (
!is_object($user_profile)
&& !\Auth::user()->hasPermissionTo('soy-agente')
&& !\Auth::user()->hasPermissionTo('soy-agente_inversor')
) {
$errors[] = 'No posees datos de facturación. Antes de usar algunas funciones como facturación, publicidad, merkado, tarifas... debes rellenar los datos.';
}
if (
is_object($user_profile)
&& is_null($user_profile->validate)
){
$errors[] = 'Tus datos de facturación están pendiente de validar');
}
// Add other checks where you can append $errors array
if (count($errors) > 0) {
return redirect()
->route('myaccount.facturacion.ver')
->with('errors', $errors);
}
return $next($request);
}
}
在读取'myaccount.autorizado.ver
路径中的错误时,您必须确保读取、解析和显示$errors
数组而不是单个错误。例如,在foreach
显示错误列表的 a 中。
推荐阅读
- python-3.x - 如何在 Librosa 音高转换效果中指定 n_fft
- python - Django 注释错误
- css - css flexBox中的文本溢出可以通过简单地添加width:0来解决,但是为什么呢?
- docker - 高山图像构建挂在 matplotlib 上
- logging - 消息日志不通过 logrotate 配置轮换
- azure - 如何在 Azure 中查看入站请求?
- excel - 选项私有模块有什么作用?插件是否可以访问选项私有模块的过程/功能?
- ansible - 如何通过 Ansible playbook 在远程服务器上运行 IBM DB2 绑定命令
- reactjs - React Hooks:无法读取未定义的属性“地图”
- python - 由于找不到模块错误,无法在 python 中运行测试