Some super useful redirect response macros to simplify your Laravel application.
- PHP
^8.0
- Laravel
^8.12
,^9.0
,^10.0
or^11.0
For legacy PHP / Laravel support, use package version 1.1.6
composer require f9webltd/laravel-redirect-response-macros
The package will automatically register itself.
Optionally publish language files by running: php artisan vendor:publish
and selecting the appropriate package.
This package allows for concise controller redirections by setting default flash data. It works as Laravels RedirectResponse
class is "macroable".
For example the packages allows:
public function store(FormRequest $request)
{
// create record ...
return redirect()->route('posts.index')->created();
}
... instead of:
public function store(FormRequest $request)
{
// create record ...
return redirect()->route('posts.index')->with('success', 'The record was successfully created');
}
The former is of course much more concise and readable.
The package specifies several custom RedirectResponse
macros that can be used on any of the native Laravel helpers that return the redirect response object.
The following methods are available.
Flash message key: success
Pass a message string to the macros.
public function update(FormRequest $request, $id)
{
return back()->success('Everything is great!');
}
Flash message key: info
Pass a message string to the macros.
public function update(FormRequest $request, $id)
{
return back()->info('Some information ...');
}
Flash message key: danger
Pass a message string to the macros.
public function update(FormRequest $request, $id)
{
return back()->danger('That action just is impossible!');
}
Flash message key: warning
Pass a message string to the macros.
public function update(FormRequest $request, $id)
{
return back()->warning('This could be risky ...');
}
There are further helper method available, that set the same type of flash data, but in a more readable manner:
Flash message key: success
Default message: The record was successfully created
public function store(FormRequest $request)
{
// create record ...
return redirect()->route('posts.index')->created();
}
Alternatively pass a url to display an message with a link to view the created record:
public function store(FormRequest $request)
{
// create record ...
return redirect()->route('posts.index')->created(
route('posts.edit', $post)
);
}
The flashed message will now be: The record was successfully created. <a href="/posts/1/edit" class="alert-link">View inserted record</a>
.
Flash message key: success
Default message: The record was successfully updated
public function update(FormRequest $requestm int $id)
{
// update record ...
return back()->updated();
}
To set a custom message, pass the desired text to the updated()
function.
Flash message key: success
Default message: The record was successfully deleted
public function update(Post $post)
{
$posts->delete();
return redirect()->route('posts.index')->deleted();
}
To set a custom message, pass the desired text to the deleted()
function.
Flash message key: error
Specific message text should be passed.
public function index()
{
// code ...
return redirect()->route('dashboard')->error('You cannot do this thing!');
}
The function can detect the presence of exception object and call getMessage()
as required:
public function index()
{
try {
$service->run();
} catch (Exception $e) {
return redirect()->route('dashboard')->error($e)
}
}
Works in the same way as the error()
macro and is intended to make controllers more concise.
The default message is Sorry, the record could not be found.
.
Flash message key: success
Default message: Welcome back, you have been securely logged in
A custom message can optionally be provided.
Works in the same way as the error()
macro and is intended to make controllers more concise.
The default message is You do not have permission to perform that action
.
Autocompletion of "macroable" classes with PHPStorm currently difficult, which is a shame given how useful macroable classes actually are.
At present, the following process will trigger autocompletion in PHPStorm:
- Copy resources/_ide_helper_macros.php to a location within your project to allow PHP storm to index the additional class methods
- Optionally add
_ide_helper_macros.php
to your.gitignore
file
Any ideas are welcome. Feel free to submit any issues or pull requests.
composer test
If you discover any security related issues, please email rob@f9web.co.uk instead of using the issue tracker.
The MIT License (MIT). Please see License File for more information.