Package Data | |
---|---|
Maintainer Username: | spatie |
Maintainer Contact: | freek@spatie.be (Freek Van der Herten) |
Package Create Date: | 2020-10-27 |
Package Last Update: | 2024-10-18 |
Home Page: | https://spatie.be/videos/front-line-php/adding-meta-data-using-attributes |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-11-17 03:06:00 |
Package Statistics | |
---|---|
Total Downloads: | 431,869 |
Monthly Downloads: | 22,573 |
Daily Downloads: | 362 |
Total Stars: | 780 |
Total Watchers: | 14 |
Total Forks: | 78 |
Total Open Issues: | 1 |
This package provides annotations to automatically register routes. Here's a quick example:
use Spatie\RouteAttributes\Attributes\Get;
class MyController
{
#[Get('my-route')]
public function myMethod()
{
}
}
This attribute will automatically register this route:
Route::get('my-route', [MyController::class, 'myMethod']);
In this video you'll get an introduction to PHP 8 attributes and how this laravel-routes-attributes works under the hood.
We invest a lot of resources into creating best in class open source packages. You can support us by buying one of our paid products.
We highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using. You'll find our address on our contact page. We publish all received postcards on our virtual postcard wall.
You can install the package via composer:
composer require spatie/laravel-route-attributes
You can publish the config file with:
php artisan vendor:publish --provider="Spatie\RouteAttributes\RouteAttributesServiceProvider" --tag="config"
This is the contents of the published config file:
return [
/*
* Automatic registration of routes will only happen if this setting is `true`
*/
'enabled' => true,
/*
* Controllers in these directories that have routing attributes
* will automatically be registered.
*/
'directories' => [
app_path('Http/Controllers'),
],
];
The package provides several annotations that should be put on controller classes and methods. These annotations will be used to automatically register routes
use Spatie\RouteAttributes\Attributes\Get;
class MyController
{
#[Get('my-route')]
public function myMethod()
{
}
}
This attribute will automatically register this route:
Route::get('my-route', [MyController::class, 'myMethod']);
We have left no HTTP verb behind. You can use these attributes on controller methods.
#[Spatie\RouteAttributes\Attributes\Post('my-uri')]
#[Spatie\RouteAttributes\Attributes\Put('my-uri')]
#[Spatie\RouteAttributes\Attributes\Patch('my-uri')]
#[Spatie\RouteAttributes\Attributes\Delete('my-uri')]
#[Spatie\RouteAttributes\Attributes\Options('my-uri')]
To register a route for all verbs, you can use the Any
attribute:
#[Spatie\RouteAttributes\Attributes\Any('my-uri')]
To register a route for a few verbs at once, you can use the Route
attribute directly:
#[Spatie\RouteAttributes\Attributes\Route(['put', 'patch'], 'my-uri')]
All HTTP verb attributes accept a parameter named name
that accepts a route name.
use Spatie\RouteAttributes\Attributes\Get;
class MyController
{
#[Get('my-route', name: "my-route-name")]
public function myMethod()
{
}
}
This attribute will automatically register this route:
Route::get('my-route', [MyController::class, 'myMethod'])->name('my-route-name');
All HTTP verb attributes accept a parameter named middleware
that accepts a middleware class or an array of middleware classes.
use Spatie\RouteAttributes\Attributes\Get;
class MyController
{
#[Get('my-route', middleware: MyMiddleware::class)]
public function myMethod()
{
}
}
This annotation will automatically register this route:
Route::get('my-route', [MyController::class, 'myMethod'])->middleware(MyMiddleware::class);
To apply middleware on all methods of a class you can use the Middleware
attribute. You can mix this with applying attribute on a method.
use Spatie\RouteAttributes\Attributes\Get;
use Spatie\RouteAttributes\Attributes\Middleware;
#[Middleware(MyMiddleware::class)]
class MyController
{
#[Get('my-route')]
public function firstMethod()
{
}
#[Get('my-other-route', middleware: MyOtherMiddleware::class)]
public function secondMethod()
{
}
}
These annotations will automatically register these routes:
Route::get('my-route', [MyController::class, 'firstMethod'])->middleware(MyMiddleware::class);
Route::get('my-other-route', [MyController::class, 'secondMethod'])->middleware([MyMiddleware::class, MyOtherMiddleware]);
You can use the Prefix
annotation on a class to prefix the routes of all methods of that class.
use Spatie\RouteAttributes\Attributes\Get;
use Spatie\RouteAttributes\Attributes\Post;
use Spatie\RouteAttributes\Attributes\Prefix;
#[Prefix('my-prefix')]
class MyController
{
#[Get('my-get-route')]
public function myGetMethod()
{
}
#[Post('my-post-route')]
public function myPostMethod()
{
}
}
These annotations will automatically register these routes:
Route::get('my-prefix/my-get-route', [MyController::class, 'myGetMethod']);
Route::post('my-prefix/my-post-route', [MyController::class, 'myPostMethod']);
You can use the Domain
annotation on a class to prefix the routes of all methods of that class.
use Spatie\RouteAttributes\Attributes\Get;
use Spatie\RouteAttributes\Attributes\Post;
use Spatie\RouteAttributes\Attributes\Domain;
#[Domain('my-subdomain.localhost')]
class MyController
{
#[Get('my-get-route')]
public function myGetMethod()
{
}
#[Post('my-post-route')]
public function myPostMethod()
{
}
}
These annotations will automatically register these routes:
Route::get('my-get-route', [MyController::class, 'myGetMethod'])->domain('my-subdomain.localhost');
Route::post('my-post-route', [MyController::class, 'myPostMethod'])->domain('my-subdomain.localhost');
You can use the Where
annotation on a class or method to constrain the format of your route parameters.
use Spatie\RouteAttributes\Attributes\Get;
use Spatie\RouteAttributes\Attributes\Post;
use Spatie\RouteAttributes\Attributes\Where;
use Spatie\RouteAttributes\Attributes\WhereAlphaNumeric;
#[Where('my-where', '[0-9]+')]
class MyController
{
#[Get('my-get-route/{my-where}')]
public function myGetMethod()
{
}
#[Post('my-post-route/{my-where}/{my-alpha-numeric}')]
#[WhereAlphaNumeric('my-alpha-numeric')]
public function myPostMethod()
{
}
}
These annotations will automatically register these routes:
Route::get('my-get-route/{my-where}', [MyController::class, 'myGetMethod'])->where(['my-where' => '[0-9]+']);
Route::post('my-post-route/{my-where}/{my-alpha-numeric}', [MyController::class, 'myPostMethod'])->where(['my-where' => '[0-9]+', 'my-alpha-numeric' => '[a-zA-Z0-9]+']);
For convenience, some commonly used regular expression patterns have helper attributes that allow you to quickly add pattern constraints to your routes.
#[WhereAlpha('alpha')]
#[WhereAlphaNumeric('alpha-numeric')]
#[WhereNumber('number')]
#[WhereUuid('uuid')]
composer test
Please see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING for details.
Please review our security policy on how to report security vulnerabilities.
The MIT License (MIT). Please see License File for more information.