在其他类的静态方法中调用重定向

问题描述 投票:0回答:2

在我的控制器中,我调用一个外部静态方法来检查用户状态,它尝试重定向但是失败了。

public function my_method(){
    SomeOtherClass::redirect_if_not_logged_in();
}

在SomeOtherClass中,代码是:

static function redirect_if_not_logged_in()
{
    $check_login = Auth::check();

    if($check_login === false){
        return redirect('/');
    }

}

我错过了什么?谢谢。

laravel
2个回答
1
投票

最好阅读文档并了解中间件的工作原理,因为它可能会在未来避免许多类似的麻烦。为简洁起见,您可以随时重构代码,以便静态方法始终返回一些内容......

static public function redirect_if_not_logged_in()
{
    $check_login = Auth::check();

    if ($check_login === false) {
        return redirect('/');
    }
    return null;
}

然后检查该方法的响应是否为空,如果它不是从控制器返回。

public function my_method()
{
    $results = SomeOtherClass::redirect_if_not_logged_in();

    if (null !== $results) {
        return $results;
    }
    // continue
}

0
投票

如果您在静态方法中中止,那么您将不必担心返回重定向响应。这将允许您在控制器中执行超出身份验证检查的代码。

static function redirect_if_not_logged_in()
{    
    if(!Auth::check()){
        abort(403);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.