royvoetman / laravel-prefixer
Define a prefix in your controller which is automatically appended to your view- or route-names.
Requires
- php: ^7.2 || ^8.0
- illuminate/http: ^5.7|^6.0|^7.0|^8.0|^9.0|^10.0
- illuminate/support: ^5.7|^5.8|^5.9|^6.0|^7.0|^8.0|^9.0|^10.0
Requires (Dev)
- phpunit/phpunit: ^8.1
README
Introduction
This packages allows you to define a prefix in your controller which will be automatically appended to your view and/or route names.
In a resource controller, it is a common pattern to have all the associated views in the same folder, and the same goes for the location of your routes. With this feature, you can define a prefix which is automatically appended to your view-name or route-name.
Installation
composer require royvoetman/laravel-prefixer
View prefixes
When you want to use View prefixes your controller will have to implement the RoyVoetman\Prefixer\Contracts\ViewPrefix
interface. This interface requires you to add a viewPrefix
method that returns a string
.
Second your Controller must include the RoyVoetman\Prefixer\Http\Traits\CreatesViews
trait. This trait includes the view(string $view)
method to the controller which handles the prefixing for us. The best practice is to include this trait in your BaseController
. This method checks if the CreatesViews
interface is implemented, if this is not the case this method will behave the same as the view()
global helper function.
namespace App\Http\Controllers; use Illuminate\Contracts\Support\Renderable; use RoyVoetman\Prefixer\Contracts\ViewPrefix; use RoyVoetman\Prefixer\Http\Traits\CreatesViews; /** * Class BookController * * @package App\Http\Controllers */ class BookController extends Controller implements ViewPrefix { use CreatesViews; /** * @return \Illuminate\Contracts\Support\Renderable */ public function create(): Renderable { // Return view: `authorized.books.create` return $this->view('create'); } /** * @return \Illuminate\Contracts\Support\Renderable */ public function edit(Book $book): Renderable { // You can have chain methods like `with()` just like // you normally would when using `return view()` return $this->view('edit')->with('book', $book); } /** * @return string */ public function viewPrefix(): string { return 'authorized.books'; } }
Route prefixes
Route prefixing works the same as View Prefixing except for the following:
The Controller must implement the RoyVoetman\Prefixer\Contracts\RoutePrefix
interface and must include the RoyVoetman\Prefixer\Http\Traits\ForwardsRequests
trait.
Instead of the viewPrefix
method, you have to include a routePrefix
method. And instead of the view(string $view)
method you have to use the redirect(string $route)
method. When the RoutePrefix
method is not implemented this method will behave the same as calling redirect()->route($route)
.
Route prefixes only work if you are using named routes.
namespace App\Http\Controllers; use Illuminate\Http\RedirectResponse; use RoyVoetman\Prefixer\Contracts\RoutePrefix; use RoyVoetman\Prefixer\Http\Traits\ForwardsRequests; /** * Class BookController * * @package App\Http\Controllers */ class BookController extends Controller implements RoutePrefix { use ForwardsRequests; /** * @return \Illuminate\Http\RedirectResponse */ public function store(): RedirectResponse { ... // Redirect to: `books.index` return $this->redirect('index'); } /** * @return \Illuminate\Http\RedirectResponse */ public function update(Book $book): RedirectResponse { ... // You can have chain methods like `with()` just like // you normally would when using `return redirect()` return $this->redirect('index')->with('status', 'Book updated'); } /** * @return string */ public function routePrefix(): string { return 'books'; } }
View and Route prefixes
There is a convenient shortcut when you want to implement the ViewPrefix
and the RoutePrefix
interface. You can include the RoyVoetman\Prefixer\Contracts\ResponsePrefixes
interface which just extends both interfaces.
/** * Interface ResponsePrefixes * * @package App\Interfaces */ interface ResponsePrefixes extends RoutePrefix, ViewPrefix { // }
Changelog
Please see CHANGELOG for more information what has changed recently.
Contributing
Contributions are welcome and will be fully credited. We accept contributions via Pull Requests on Github.
Pull Requests
- PSR-2 Coding Standard - The easiest way to apply the conventions is to install PHP Code Sniffer.
- Document any change in behaviour - Make sure the
README.md
and any other relevant documentation are kept up-to-date. - Create feature branches - Don't ask us to pull from your master branch.
- One pull request per feature - If you want to do more than one thing, send multiple pull requests.
License
The MIT License (MIT). Please see License File for more information.