是否有一种方法可以在Laravel中覆盖RouteServiceProvider :: HOME?

时间:2020-03-20 15:06:03

标签: php laravel laravel-7

我最近开始学习Laravel。我在Laravel应用的默认LoginController中覆盖了redirectTo()方法。

class LoginController extends Controller
{
    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = RouteServiceProvider::HOME;

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

    protected function redirectTo()
    {
        return '/dashboard';
    }
}

它工作正常,但是如果已通过身份验证的用户尝试再次登录(该用户尚未注销并尝试访问'/ login'路由),则该用户将被重定向到'/主页”,显然是RouteServiceProvider :: HOME常量。我可以简单地更改RouteServiceProvider :: HOME常量,但是肯定有一个更好的选择。同样,如果重定向取决于用户的角色,那么简单地更改常量将无济于事。那么,重写RouteServiceProvider :: HOME常量的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

这不是方法,而是常量。 您可以在app\Providers\RouteServiceProviders.php中进行更改 您会发现以下行:

public const HOME = '/home';

根据您的需要进行更改。 如果您不想更改它,而只能在

中本地更改
protected $redirectTo = RouteServiceProvider::HOME;

行到

protected $redirectTo = '/whatever'

答案 1 :(得分:0)

在 Laravel8 中你可以覆盖 LoginController 中的以下方法

protected function authenticated(Request $request, $user)
{
    return redirect('/dashboard');
}

在 app\Http\Middleware\RedirectIfAuthenticated.php 中

public function handle($request, Closure $next, $guard = null)
{
    
    
    if (Auth::guard($guard)->check()) {
        
        return redirect('/dashboard');
        
        //return redirect(RouteServiceProvider::HOME);

    }

    return $next($request);
}

答案 2 :(得分:0)

如果您需要动态属性,您也可以覆盖 redirectTo 方法。

/**
 * @return string
 */
public function redirectTo() : string
{
    return '/dashboard';
}