{"id":13609066,"url":"https://github.com/spatie/laravel-route-attributes","last_synced_at":"2026-02-23T09:55:47.585Z","repository":{"id":40246730,"uuid":"307729800","full_name":"spatie/laravel-route-attributes","owner":"spatie","description":"Use PHP 8 attributes to register routes in a Laravel app","archived":false,"fork":false,"pushed_at":"2025-04-08T09:41:20.000Z","size":326,"stargazers_count":819,"open_issues_count":2,"forks_count":86,"subscribers_count":12,"default_branch":"main","last_synced_at":"2025-04-26T01:41:13.361Z","etag":null,"topics":["laravel","php","php8"],"latest_commit_sha":null,"homepage":"https://spatie.be/videos/front-line-php/adding-meta-data-using-attributes","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/spatie.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"spatie"}},"created_at":"2020-10-27T14:39:10.000Z","updated_at":"2025-04-25T23:14:10.000Z","dependencies_parsed_at":"2025-04-11T04:15:09.949Z","dependency_job_id":null,"html_url":"https://github.com/spatie/laravel-route-attributes","commit_stats":{"total_commits":252,"total_committers":43,"mean_commits":"5.8604651162790695","dds":0.7103174603174602,"last_synced_commit":"80570b5efa44f56e775a42d752ffc45797336bc3"},"previous_names":[],"tags_count":44,"template":false,"template_full_name":"spatie/package-skeleton-laravel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spatie%2Flaravel-route-attributes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spatie%2Flaravel-route-attributes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spatie%2Flaravel-route-attributes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spatie%2Flaravel-route-attributes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/spatie","download_url":"https://codeload.github.com/spatie/laravel-route-attributes/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251080977,"owners_count":21533153,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["laravel","php","php8"],"created_at":"2024-08-01T19:01:32.203Z","updated_at":"2026-02-23T09:55:47.520Z","avatar_url":"https://github.com/spatie.png","language":"PHP","funding_links":["https://github.com/sponsors/spatie"],"categories":["PHP"],"sub_categories":[],"readme":"# Use PHP 8 attributes to register routes in a Laravel app\n\n[![Latest Version on Packagist](https://img.shields.io/packagist/v/spatie/laravel-route-attributes.svg?style=flat-square)](https://packagist.org/packages/spatie/laravel-route-attributes)\n![Tests](https://github.com/spatie/laravel-route-attributes/workflows/Tests/badge.svg)\n[![Type Coverage](https://shepherd.dev/github/spatie/laravel-route-attributes/coverage.svg)](https://shepherd.dev/github/spatie/laravel-route-attributes)\n[![Total Downloads](https://img.shields.io/packagist/dt/spatie/laravel-route-attributes.svg?style=flat-square)](https://packagist.org/packages/spatie/laravel-route-attributes)\n\nThis package provides attributes to automatically register routes. Here's a quick example:\n\n```php\nuse Spatie\\RouteAttributes\\Attributes\\Get;\n\nclass MyController\n{\n    #[Get('my-route')]\n    public function myMethod()\n    {\n    }\n}\n```\n\nThis attribute will automatically register this route:\n\n```php\nRoute::get('my-route', [MyController::class, 'myMethod']);\n```\n\n## Are you a visual learner?\n\n[In this video](https://spatie.be/videos/front-line-php/adding-meta-data-using-attributes) you'll get an introduction to PHP 8 attributes and how this laravel-routes-attributes works under the hood.\n\n## Support us\n\n[\u003cimg src=\"https://github-ads.s3.eu-central-1.amazonaws.com/laravel-route-attributes.jpg?t=2\" width=\"419px\" /\u003e](https://spatie.be/github-ad-click/laravel-route-attributes)\n\nWe invest a lot of resources into creating [best in class open source packages](https://spatie.be/open-source). You can support us by [buying one of our paid products](https://spatie.be/open-source/support-us).\n\nWe 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](https://spatie.be/about-us). We publish all received postcards on [our virtual postcard wall](https://spatie.be/open-source/postcards).\n\n## Installation\n\nYou can install the package via composer:\n\n```bash\ncomposer require spatie/laravel-route-attributes\n```\n\nYou can publish the config file with:\n```bash\nphp artisan vendor:publish --provider=\"Spatie\\RouteAttributes\\RouteAttributesServiceProvider\" --tag=\"config\"\n```\n\nThis is the contents of the published config file:\n\n```php\nreturn [\n    /*\n     *  Automatic registration of routes will only happen if this setting is `true`\n     */\n    'enabled' =\u003e true,\n\n    /*\n     * Controllers in these directories that have routing attributes\n     * will automatically be registered.\n     *\n     * Optionally, you can specify group configuration by using key/values\n     */\n    'directories' =\u003e [\n        app_path('Http/Controllers'),\n\n        app_path('Http/Controllers/Web') =\u003e [\n            'middleware' =\u003e ['web']\n        ],\n\n        app_path('Http/Controllers/Api') =\u003e [\n            'prefix' =\u003e 'api',\n            'middleware' =\u003e 'api'\n        ],\n    ],\n];\n```\n\nFor controllers outside the applications root namespace directories can also be added using a `namespace =\u003e path` pattern in the directories array. In the following example controllers from `Modules\\Admin\\Http\\Controllers` will be included.\n\n```php\n'directories' =\u003e [\n    'Modules\\Admin\\Http\\Controllers\\\\' =\u003e base_path('admin-module/Http/Controllers'),\n    // Or\n    base_path('admin-module/Http/Controllers') =\u003e [\n        'namespace' =\u003e 'Modules\\Admin\\Http\\Controllers\\\\'\n    ],\n    app_path('Http/Controllers'),\n],\n```\n\nIf you are using a directory structure where you co-locate multiple types of files in the same directory and want to\nbe more specific about which files are checked for route attributes, you can use the `patterns` and `not_patterns`\noptions. For example, if you are co-locating your tests with your controllers you could use the `patterns` option to only\nlook in controller files, or you could use `not_patterns` to configure it to not look in test files for route\nattributes.\n\n```php\n'directories' =\u003e [\n    base_path('app-modules/Blog') =\u003e [\n        // only register routes in files that match the patterns\n        'patterns' =\u003e ['*Controller.php'],\n        // do not register routes in files that match the patterns\n        'not_patterns' =\u003e ['*Test.php'],\n    ],\n],\n```\n\n## Usage\n\nThe package provides several annotations that should be put on controller classes and methods. These annotations will be used to automatically register routes\n\n### Adding a GET route\n\n```php\nuse Spatie\\RouteAttributes\\Attributes\\Get;\n\nclass MyController\n{\n    #[Get('my-route')]\n    public function myMethod()\n    {\n\n    }\n}\n```\n\nThis attribute will automatically register this route:\n\n```php\nRoute::get('my-route', [MyController::class, 'myMethod']);\n```\n\n### Using other HTTP verbs\n\nWe have left no HTTP verb behind. You can use these attributes on controller methods.\n\n```php\n#[Spatie\\RouteAttributes\\Attributes\\Post('my-uri')]\n#[Spatie\\RouteAttributes\\Attributes\\Put('my-uri')]\n#[Spatie\\RouteAttributes\\Attributes\\Patch('my-uri')]\n#[Spatie\\RouteAttributes\\Attributes\\Delete('my-uri')]\n#[Spatie\\RouteAttributes\\Attributes\\Options('my-uri')]\n```\n\n### Resource controllers\n\nTo register a [resource controller](https://laravel.com/docs/controllers#resource-controllers), use the `Resource` attribute as shown in the example below.\n\nYou can use `only` or `except` parameters to manage your resource routes availability.\n\nYou can use `parameters` parameter to modify the default parameters set by the resource attribute.\n\nYou can use the `names` parameter to set the route names for the resource controller actions. Pass a string value to set a base route name for each controller action or pass an array value to define the route name for each controller action.\n\nYou can use `shallow` parameter to make a nested resource to apply nesting only to routes without a unique child identifier (`index`, `create`, `store`).\n\nYou can use `apiResource` boolean parameter to only include actions used in APIs. Alternatively, you can use the `ApiResource` attribute, which extends the `Resource` attribute class, but the parameter `apiResource` is already set to `true`.\n\nUsing `Resource` attribute with `Domain`, `Prefix` and `Middleware` attributes works as well.\n\n```php\nuse Spatie\\RouteAttributes\\Attributes\\Resource;\n\n#[Prefix('api/v1')]\n#[Resource(\n    resource: 'photos.comments',\n    apiResource: true,\n    shallow: true,\n    parameters: ['comments' =\u003e 'comment:uuid'],\n    names: 'api.v1.photoComments',\n    except: ['destroy'],\n)]\n// OR #[ApiResource(resource: 'photos.comments', shallow: true, ...)]\nclass PhotoCommentController\n{\n    public function index(Photo $photo)\n    {\n    }\n\n    public function store(Request $request, Photo $photo)\n    {\n    }\n\n    public function show(Comment $comment)\n    {\n    }\n\n    public function update(Request $request, Comment $comment)\n    {\n    }\n}\n```\n\nThe attribute in the example above will automatically register following routes:\n\n```php\nRoute::get('api/v1/photos/{photo}/comments', [PhotoCommentController::class, 'index'])-\u003ename('api.v1.photoComments.index');\nRoute::post('api/v1/photos/{photo}/comments', [PhotoCommentController::class, 'store'])-\u003ename('api.v1.photoComments.store');\nRoute::get('api/v1/comments/{comment}', [PhotoCommentController::class, 'show'])-\u003ename('api.v1.photoComments.show');\nRoute::match(['put', 'patch'], 'api/v1/comments/{comment}', [PhotoCommentController::class, 'update'])-\u003ename('api.v1.photoComments.update');\n```\n\n### Using multiple verbs\n\nTo register a route for all verbs, you can use the `Any` attribute:\n\n```php\n#[Spatie\\RouteAttributes\\Attributes\\Any('my-uri')]\n```\n\nTo register a route for a few verbs at once, you can use the `Route` attribute directly:\n\n```php\n#[Spatie\\RouteAttributes\\Attributes\\Route(['put', 'patch'], 'my-uri')]\n```\n\n### Specify a route name\n\nAll HTTP verb attributes accept a parameter named `name` that accepts a route name.\n\n```php\nuse Spatie\\RouteAttributes\\Attributes\\Get;\n\nclass MyController\n{\n    #[Get('my-route', name: \"my-route-name\")]\n    public function myMethod()\n    {\n    }\n}\n```\n\nThis attribute will automatically register this route:\n\n```php\nRoute::get('my-route', [MyController::class, 'myMethod'])-\u003ename('my-route-name');\n```\n\n### Adding middleware\n\nAll HTTP verb attributes accept a parameter named `middleware` that accepts a middleware class or an array of middleware classes.\n\n```php\nuse Spatie\\RouteAttributes\\Attributes\\Get;\n\nclass MyController\n{\n    #[Get('my-route', middleware: MyMiddleware::class)]\n    public function myMethod()\n    {\n\n    }\n}\n```\n\nThis annotation will automatically register this route:\n\n```php\nRoute::get('my-route', [MyController::class, 'myMethod'])-\u003emiddleware(MyMiddleware::class);\n```\n\nTo apply middleware on all methods of a class you can use the `Middleware` attribute. You can mix this with applying attribute on a method.\n\n```php\nuse Spatie\\RouteAttributes\\Attributes\\Get;\nuse Spatie\\RouteAttributes\\Attributes\\Middleware;\n\n#[Middleware(MyMiddleware::class)]\nclass MyController\n{\n    #[Get('my-route')]\n    public function firstMethod()\n    {\n    }\n\n    #[Get('my-other-route', middleware: MyOtherMiddleware::class)]\n    public function secondMethod()\n    {\n    }\n}\n```\n\nThese annotations will automatically register these routes:\n\n```php\nRoute::get('my-route', [MyController::class, 'firstMethod'])-\u003emiddleware(MyMiddleware::class);\nRoute::get('my-other-route', [MyController::class, 'secondMethod'])-\u003emiddleware([MyMiddleware::class, MyOtherMiddleware::class]);\n```\n\n### Specifying a prefix\n\nYou can use the `Prefix` annotation on a class to prefix the routes of all methods of that class.\n\n```php\nuse Spatie\\RouteAttributes\\Attributes\\Get;\nuse Spatie\\RouteAttributes\\Attributes\\Post;\nuse Spatie\\RouteAttributes\\Attributes\\Prefix;\n\n#[Prefix('my-prefix')]\nclass MyController\n{\n    #[Get('my-get-route')]\n    public function myGetMethod()\n    {\n    }\n\n    #[Post('my-post-route')]\n    public function myPostMethod()\n    {\n    }\n}\n```\n\nThese annotations will automatically register these routes:\n\n```php\nRoute::get('my-prefix/my-get-route', [MyController::class, 'myGetMethod']);\nRoute::post('my-prefix/my-post-route', [MyController::class, 'myPostMethod']);\n```\n\n### Specifying a domain\n\nYou can use the `Domain` annotation on a class to prefix the routes of all methods of that class.\n\n```php\nuse Spatie\\RouteAttributes\\Attributes\\Get;\nuse Spatie\\RouteAttributes\\Attributes\\Post;\nuse Spatie\\RouteAttributes\\Attributes\\Domain;\n\n#[Domain('my-subdomain.localhost')]\nclass MyController\n{\n    #[Get('my-get-route')]\n    public function myGetMethod()\n    {\n    }\n\n    #[Post('my-post-route')]\n    public function myPostMethod()\n    {\n    }\n}\n```\n\nThese annotations will automatically register these routes:\n\n```php\nRoute::get('my-get-route', [MyController::class, 'myGetMethod'])-\u003edomain('my-subdomain.localhost');\nRoute::post('my-post-route', [MyController::class, 'myPostMethod'])-\u003edomain('my-subdomain.localhost');\n```\n\n### Specifying a domain from a config key\n\nThere maybe a need to define a domain from a configuration file, for example where\nyour subdomain will be different on your development environment to your production environment.\n\n\n```php\n// config/domains.php\nreturn [\n    'main' =\u003e env('SITE_URL', 'example.com'),\n    'subdomain' =\u003e env('SUBDOMAIN_URL', 'subdomain.example.com')\n];\n```\n\n```php\nuse Spatie\\RouteAttributes\\Attributes\\Get;\nuse Spatie\\RouteAttributes\\Attributes\\Post;\nuse Spatie\\RouteAttributes\\Attributes\\DomainFromConfig;\n\n#[DomainFromConfig('domains.main')]\nclass MyController\n{\n    #[Get('my-get-route')]\n    public function myGetMethod()\n    {\n    }\n}\n```\nWhen this is parsed, it will get the value of `domains.main` from the config file and\nregister the route as follows;\n\n```php\nRoute::get('my-get-route', [MyController::class, 'myGetMethod'])-\u003edomain('example.com');\n```\n\n### Scoping bindings\n\nWhen implicitly binding multiple Eloquent models in a single route definition, you may wish to scope the second Eloquent model such that it must be a child of the previous Eloquent model.\n\nBy adding the `ScopeBindings` annotation, you can enable this behaviour:\n\n````php\nuse Spatie\\RouteAttributes\\Attributes\\Get;\nuse Spatie\\RouteAttributes\\Attributes\\ScopeBindings;\n\nclass MyController\n{\n    #[Get('users/{user}/posts/{post}')]\n    #[ScopeBindings]\n    public function getUserPost(User $user, Post $post)\n    {\n        return $post;\n    }\n}\n````\n\nThis is akin to using the `-\u003escopeBindings()` method on the route registrar manually:\n\n```php\nRoute::get('/users/{user}/posts/{post}', function (User $user, Post $post) {\n    return $post;\n})-\u003escopeBindings();\n```\n\nBy default, Laravel will enabled scoped bindings on a route when using a custom keyed implicit binding as a nested route parameter, such as `/users/{user}/posts/{post:slug}`.\n\nTo disable this behaviour, you can pass `false` to the attribute:\n\n```php\n#[ScopeBindings(false)]\n```\n\nThis is the equivalent of calling `-\u003ewithoutScopedBindings()` on the route registrar manually.\n\nYou can also use the annotation on controllers to enable implicitly scoped bindings for all its methods. For any methods where you want to override this, you can pass `false` to the attribute on those methods, just like you would normally.\n\n### Specifying where\n\nYou can use the `Where` annotation on a class or method to constrain the format of your route parameters.\n\n\n```php\nuse Spatie\\RouteAttributes\\Attributes\\Get;\nuse Spatie\\RouteAttributes\\Attributes\\Post;\nuse Spatie\\RouteAttributes\\Attributes\\Where;\nuse Spatie\\RouteAttributes\\Attributes\\WhereAlphaNumeric;\n\n#[Where('my-where', '[0-9]+')]\nclass MyController\n{\n    #[Get('my-get-route/{my-where}')]\n    public function myGetMethod()\n    {\n    }\n\n    #[Post('my-post-route/{my-where}/{my-alpha-numeric}')]\n    #[WhereAlphaNumeric('my-alpha-numeric')]\n    public function myPostMethod()\n    {\n    }\n}\n```\n\nThese annotations will automatically register these routes:\n\n```php\nRoute::get('my-get-route/{my-where}', [MyController::class, 'myGetMethod'])-\u003ewhere(['my-where' =\u003e '[0-9]+']);\nRoute::post('my-post-route/{my-where}/{my-alpha-numeric}', [MyController::class, 'myPostMethod'])-\u003ewhere(['my-where' =\u003e '[0-9]+', 'my-alpha-numeric' =\u003e '[a-zA-Z0-9]+']);\n```\n\nFor convenience, some commonly used regular expression patterns have helper attributes that allow you to quickly add pattern constraints to your routes.\n\n```php\n#[WhereAlpha('alpha')]\n#[WhereAlphaNumeric('alpha-numeric')]\n#[WhereIn('in', ['value1', 'value2'])]\n#[WhereNumber('number')]\n#[WhereUlid('ulid')]\n#[WhereUuid('uuid')]\n```\n\n### Specifying a group\n\nYou can use the `Group` annotation on a class to create multiple groups with different domains and prefixes for the routes of all methods of that class.\n\n```php\nuse Spatie\\RouteAttributes\\Attributes\\Get;\nuse Spatie\\RouteAttributes\\Attributes\\Post;\nuse Spatie\\RouteAttributes\\Attributes\\Domain;\n\n#[Group(domain: 'my-subdomain.localhost', prefix: 'my-prefix')]\n#[Group(domain: 'my-second-subdomain.localhost', prefix: 'my-second-prefix')]\nclass MyController\n{\n    #[Get('my-get-route')]\n    public function myGetMethod()\n    {\n    }\n\n    #[Post('my-post-route')]\n    public function myPostMethod()\n    {\n    }\n}\n```\n\nThese annotations will automatically register these routes:\n\n```php\nRoute::get('my-get-route', [MyController::class, 'myGetMethod'])-\u003eprefix('my-prefix')-\u003edomain('my-subdomain.localhost');\nRoute::post('my-post-route', [MyController::class, 'myPostMethod'])-\u003eprefix('my-prefix')-\u003edomain('my-subdomain.localhost');\nRoute::get('my-get-route', [MyController::class, 'myGetMethod'])-\u003eprefix('my-second-prefix')-\u003edomain('my-second-subdomain.localhost');\nRoute::post('my-post-route', [MyController::class, 'myPostMethod'])-\u003eprefix('my-second-prefix')-\u003edomain('my-second-subdomain.localhost');\n```\n\n### Specifying defaults\n\nYou can use the `Defaults` annotation on a class or method to define the default values of your optional route parameters.\n\n```php\nuse Spatie\\RouteAttributes\\Attributes\\Defaults;\nuse Spatie\\RouteAttributes\\Attributes\\Get;\nuse Spatie\\RouteAttributes\\Attributes\\Post;\n\n#[Defaults('param', 'controller-default')]\nclass MyController extends Controller\n{\n    #[Get('my-get-route/{param?}')]\n    public function myGetMethod($param)\n    {\n    }\n\n    #[Post('my-post-route/{param?}/{param2?}')]\n    #[Defaults('param2', 'method-default')]\n    public function myPostMethod($param, $param2)\n    {\n    }\n\n    #[Get('my-default-route/{param?}/{param2?}/{param3?}')]\n    #[Defaults('param2', 'method-default-first')]\n    #[Defaults('param3', 'method-default-second')]\n    public function myDefaultMethod($param, $param2, $param3)\n    {\n    }\n\n    #[Get('my-override-route/{param?}')]\n    #[Defaults('param', 'method-default')]\n    public function myOverrideMethod($param)\n    {\n    }\n}\n```\n\nThese annotations will automatically register these routes:\n\n```php\nRoute::get('my-get-route/{param?}', [MyController::class, 'myGetMethod'])-\u003esetDefaults(['param', 'controller-default']);\nRoute::post('my-post-route/{param?}/{param2?}', [MyController::class, 'myPostMethod'])-\u003esetDefaults(['param', 'controller-default', 'param2' =\u003e 'method-default']);\nRoute::get('my-default-route/{param?}/{param2?}/{param3?}', [MyController::class, 'myDefaultMethod'])-\u003esetDefaults(['param', 'controller-default', 'param2' =\u003e 'method-default-first', 'param3' =\u003e 'method-default-second']);\nRoute::get('my-override-route/{param?}', [MyController::class, 'myOverrideMethod'])-\u003esetDefaults(['param', 'method-default']);\n```\n\n### With Trashed\n\nYou can use the `WithTrashed` annotation on a class or method to enable WithTrashed bindings to the model.\nYou can explicitly override the behaviour using `WithTrashed(false)` if it is applied at the class level\n\n```php\nuse Spatie\\RouteAttributes\\Attributes\\Get;\nuse Spatie\\RouteAttributes\\Attributes\\Post;\nuse Spatie\\RouteAttributes\\Attributes\\WithTrashed;\n\n#[WithTrashed]\nclass MyController extends Controller\n{\n    #[Get('my-get-route/{param}')]\n    #[WithTrashed]\n    public function myGetMethod($param)\n    {\n    }\n\n    #[Post('my-post-route/{param}')]\n    #[WithTrashed(false)]    \n    public function myPostMethod($param)\n    {\n    }\n\n    #[Get('my-default-route/{param}')]\n    public function myDefaultMethod($param)\n    {\n    }    \n}\n```\nThese annotations will automatically register these routes:\n\n```php\nRoute::get('my-get-route/{param}', [MyController::class, 'myGetMethod'])-\u003eWithTrashed();\nRoute::post('my-post-route/{param}', [MyController::class, 'myPostMethod'])-\u003ewithTrashed(false);\nRoute::get('my-default-route/{param}', [MyController::class, 'myDefaultMethod'])-\u003ewithTrashed();\n```\n\n\n## Testing\n\n``` bash\ncomposer test\n```\n\n## Changelog\n\nPlease see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.\n\n## Contributing\n\nPlease see [CONTRIBUTING](https://github.com/spatie/.github/blob/main/CONTRIBUTING.md) for details.\n\n## Security Vulnerabilities\n\nPlease review [our security policy](../../security/policy) on how to report security vulnerabilities.\n\n## Credits\n\n- [Freek Van der Herten](https://github.com/freekmurze)\n- [All Contributors](../../contributors)\n\n## License\n\nThe MIT License (MIT). Please see [License File](LICENSE.md) for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspatie%2Flaravel-route-attributes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspatie%2Flaravel-route-attributes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspatie%2Flaravel-route-attributes/lists"}