-
Redirecting to Controller Actions
-
Redirecting with Flashed Session data
-
Redirect in Constructor
There are several ways to redirect responses. The simplest method is to use the
global redirect() helper.
Route::get('noprofile', function(){
return redirect()->to('user/profile');
});
Or:
Route::get('noprofile', function(){
return redirect('user/profile');
});
There is also a
back() function to redirect the user to their previous location.
Route::post('user/profile', function(){
// Validate the request...
return back()->withInput();
});
Redirecting To Named Routes
Each Route can have a specific name. The name can be assigned using the
name() method.
- Example:
1. In
routes/web.php create a route for "
/test" page, with the name "
testing".
Create another route for "
/redirect" which will redirect the request to the named route "
testing".
Route::name('testing')->get('/test', function(){
return 'Life is an effect, the cause is Love.';
});
Route::get('redirect',function(){
return redirect()->route('testing');
});
2. Visit the following URL to test the named route example.
//localhost:8000/redirect
After execution of the above URL, you will be redirected to
//localhost:8000/test , the location of the named route "
testing".
If your route has parameters, you may pass them into an array as the second argument to the route() method.
// For a route with the following URI: profile/{id}
return redirect()->route('profile', ['id'=>1]);
Redirecting to Controller Actions
To redirect to controller actions, pass the controller and the method name to the
action() function.
return redirect()->action('HomeController@index');
If your controller route requires parameters, you may pass them into an array as the second argument to the action() method:
return redirect()->action('UserController@profile', ['id'=>1]);
Redirecting with Flashed Session data
If you want to pass a message to the page where the user is redirected, for example after successfully performing an action, you may create a redirect response and flash data to the session using the
with() method.
Route::post('user/profile', function(){
// Update the user's profile...
return redirect('dashboard')->with('status', 'Profile updated!');
});
After the user is redirected, you may display the flashed message from the session. For example, using
Blade syntax:
@if(session('status'))
<div class="alert-success">
{{ session('status') }}
</div>
@endif
After redirect with the with() method, the flashed session is automatically deleted from "session".
Redirect in Constructor
To make a
redirect() from a __construct() of a controller, to make sure that the redirect() is performed, without executing other method, use:
redirect()->send().
If you want to make a redirect in
__construct() according to a session, use the
$this->middleware() method in constructor, with the code for redirect in a callback function, like in this syntax.
public function __construct(){
$this->middleware(function($request, $next){
//Your code with Session, for redirect
return $next($request); //<- this is required
});
}
- Example, a piece of code from a controller. If the Session 'admin_logg' not exist, it will redirect to '/'; the test() method will not be executed:
public function __construct(Request $request){
//this Closure is needed because it is used session in __construct
$this->middleware(function($request, $next){
if(!session()->has('admin_logg')){
return redirect('/')->send();
}
return $next($request);
});
$this->test();
}
public function test(){
echo 'Laravel tutorial';
}