首页 > 解决方案 > 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 总是检查它,而其余的则“忽略”它们。

我该如何解决?

标签: laravel

解决方案


您可以将错误存储在数组中,并在方法结束时重定向。

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 中。


推荐阅读