URL Redirects From Called Functions In Laravel


12th August 2020 2 mins read
Share On        


Most of the time, you would be facing problems when you might want to redirect from called functions.


But this article I will show you a simple way to force URL redirect from other functions in Laravel.


Problem


Assume you are developing multi-tenancy application, and you have custom designed your login system and don't want login user to see login page, then you would do something like the following in AuthController.


It just checks for the user session and redirects to the default landing page as per the user role.


Calling Function - AuthController -> login()

Called Function - Controller -> loginRedirect()


AuthController.php

class AuthController extends Controller
{
    public function login()
    {
        /** Login Redirect Is Handled From Controller class */
        $this->loginRedirect();
        return view('auth.login');
    }
}


Controller.php

class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    public function loginRedirectLink()
    {
        /** If admin redirect to dashboard URL else customers URL */
        $role = session()->get('user_details')->role;
        return ($role == 'admin') ? 'dashboard' : 'customers';
    }

    public function loginRedirect()
    {
        /** Check if user is already logged in if yes then redirect accordingly */
        if (session()->has('user_details')) {
            redirect($this->loginRedirectLink());
        }
    }
}


Basically, if you use redirect()->to('some_link') or redirect('some_link'), then redirect of URL will be returned to CALLING FUNCTION and won't redirects from CALLED FUNCTION.


redirect($this->loginRedirectLink());

Solution (redirect()->to('url')->send())


With the help of redirect()->to('url')->send() we will force redirect the url from CALLED FUNCTION


redirect()->to($this->loginRedirectLink())->send();


Controller.php

class Controller extends BaseController
{
    /** ** Other Code ** */
    public function loginRedirect()
    {
        if (session()->has('user_details')) {
            redirect()->to($this->loginRedirectLink())->send();
        }
    }
}

Conclusion


I hope this article helped you. Please share it with your friends.




AUTHOR

Channaveer Hakari

I am a full-stack developer working at WifiDabba India Pvt Ltd. I started this blog so that I can share my knowledge and enhance my skills with constant learning.

Never stop learning. If you stop learning, you stop growing