Redirects
Creating Redirects
Redirect responses are instances of the LaraGram\Request\RedirectResponse
class, and redirect the user to another listen. There are several ways to generate a RedirectResponse
instance. The simplest method is to use the global redirect
helper:
Bot:onCommand('dashboard', function () {
return redirect()->listen('home');
});
Redirecting To Named Listens
When you call the redirect
helper with no parameters, an instance of LaraGram\Listening\Redirector
is returned, allowing you to call any method on the Redirector
instance. For example, to generate a RedirectResponse
to a named listen, you may use the listen
method:
return redirect()->listen('login');
If your listen has parameters, you may pass them as the second argument to the listen
method:
// For a listen with the following Pattern: profile {id}
return redirect()->listen('profile', ['id' => 1]);
For convenience, LaraGram also offers the global to_listen
function:
return to_listen('profile', ['id' => 1]);
Populating Parameters Via Eloquent Models
If you are redirecting to a listen with an "ID" parameter that is being populated from an Eloquent model, you may pass the model itself. The ID will be extracted automatically:
// For a listen with the following Pattern: profile {id}
return redirect()->listen('profile', [$user]);
If you would like to customize the value that is placed in the listen parameter, you should override the getListenKey
method on your Eloquent model:
/**
* Get the value of the model's listen key.
*/
public function getListenKey(): mixed
{
return $this->slug;
}
Redirecting To Controller Actions
You may also generate redirects to controller actions. To do so, pass the controller and action name to the action
method:
use App\Controllers\HomeController;
return redirect()->action([HomeController::class, 'index']);
If your controller listen requires parameters, you may pass them as the second argument to the action
method:
return redirect()->action(
[UserController::class, 'profile'], ['id' => 1]
);
Redirecting With Flashed Session Data
Redirecting to a new listen and putting data to the cache are usually done at the same time. Typically, this is done after successfully performing an action when you put a success message to the cache. For convenience, you may create a RedirectResponse
instance and put data to the cache in a single, fluent method chain:
Bot:onCommand('dashboard', function () {
// Update the user's profile...
return to_listen('home')->with('status', 'Profile updated!');
});
You may use the withInput
method provided by the RedirectResponse
instance to put the current request's input data to the cache before redirecting the user to a new location. Once the input has been putted to the cache, you may easily retrieve it during the next request:
return to_listen('home')->withInput();
After the user is redirected, you may display the putted message from the cache. For example, using Temple8 syntax:
@if (cache('status'))
{{ cache('status') }}
@endif