简体   繁体   中英

Using named routes in protected methods in Laravel Controller

In my LoginController I have:

protected $redirectTo = '';

I then do this:

public function boot()
{
    Parent::boot();

    $this->redirectTo = route('org.home');
    $this->logoutTo   = route('user.login');
}

But in a method in the controller I check and I get a BLANK value from $this->redirectTo

protected function authenticated(Request $request, $user)
{
    dd($this->redirectTo);
}

How do I make the value of this variable dynamic and use the route name to assign its value?

Here is my whole controller based on the comments below:

<?php

namespace App\Http\Controllers\Auth;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

    /**
     * Which Authentication Guard we are working with
     *
     * @var string
     */
    protected $guard = 'user';

    /**
     * URI where we redirect to after registration
     *
     * @var string
     */
    protected $redirectTo = '';

    /**
     * URI where we redirect to after logout
     *
     * @var string
     */
    protected $logoutTo = '';

    /**
     * LoginController constructor.
     */
    public function __construct()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Parent::boot();

        $this->redirectTo = route('org.home');
        $this->logoutTo   = route('user.login');
    }

    /**
     * Show the application's login form.
     *
     * @return \Illuminate\Http\Response
     */
    public function showLoginForm()
    {
        return view('auth.user.main.login');
    }

    /**
     * Log the user out of the application.
     *
     * @param  \Illuminate\Http\Request $request
     * @return \Illuminate\Http\Response
     */
    public function logout(Request $request)
    {
        Auth::guard($this->guard)->logout();

        $request->session()->flush();

        $request->session()->regenerate();

        if ($request->ajax()) {
            return response()->json([
                'type'    => 'success',
                'message' => trans('auth.logout_ok')
            ]);
        } else {
            return redirect($this->logoutTo ?: '/');
        }
    }

    /**
     * The user has been authenticated.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  mixed                    $user
     * @return mixed
     */
    protected function authenticated(Request $request, $user)
    {
        // If this user belongs to a partner
        if ($user->isPartner()) {

            // And the partner is active, then continue
            if (!$user->partner->isActive()) {

                // Else respond with an error
                $error = [
                    'type'    => 'error',
                    'message' => trans('messages.partner_inactive')
                ];

                if ($request->ajax()) {
                    return response()->json($error);
                } else {
                    return redirect()->back()->withErrors($error);
                }

            }

        }

dd($this->redirectTo);

        // Set up the user's session
        $this->setupSession();

        if ($request->ajax()) {
            return response()->json([
                'type'     => 'success',
                'user'     => auth()->check(),
                'intended' => $this->redirectPath(),
                'message'  => trans('auth.logout_ok')
            ]);
        } else {
            return redirect()->intended($this->redirectPath());
        }
    }

    /**
     * Send the response after the user was authenticated.
     *
     * @param  \Illuminate\Http\Request $request
     * @return \Illuminate\Http\Response
     */
    protected function sendLoginResponse(Request $request)
    {
        $request->session()->regenerate();

        $this->clearLoginAttempts($request);

        if ($this->authenticated($request, $this->guard()->user())) {
            return true;
        } else {

            if ($request->ajax()) {
                return response()->json([
                    'type'     => 'error',
                    'user'     => auth()->check(),
                    'intended' => $this->redirectPath(),
                    'message'  => trans('auth.not_login')
                ]);

            } else {
                return redirect()->intended($this->redirectPath());
            }

        }
    }

    /**
     * Get the failed login response instance.
     *
     * @param  \Illuminate\Http\Request $request
     * @return \Illuminate\Http\RedirectResponse
     */
    protected function sendFailedLoginResponse(Request $request)
    {
        $errors = [$this->username() => trans('auth.failed')];

        if ($request->expectsJson()) {
            return response()->json($errors, 422);
        }

        return redirect()->back()
            ->withInput($request->only($this->username(), 'remember'))
            ->withErrors($errors);
    }

    /**
     * Set up all session variables here
     */
    private function setupSession()
    {
//        session()->put('user', Auth::user());
    }
}

I had to put my assignments here

public function __construct()
{
    $this->redirectTo = route('org.home');
    $this->logoutTo   = route('user.login');
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM