attr-route / laravel-attribute-route
Enterprise-grade Laravel routing via PHP Attributes
Package info
github.com/SulmaneDev/laravel-attribute-route
pkg:composer/attr-route/laravel-attribute-route
Requires
- php: ^8.1
- illuminate/routing: ^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0
- illuminate/support: ^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0
Requires (Dev)
- orchestra/testbench: ^7.0|^8.0|^9.0
- phpunit/phpunit: ^9.5|^10.0
README
Created with love and with other contributors.
Laravel Attribute Routing is an enterprise-grade package that revolutionizes how you define routes in Laravel. Using PHP 8 Attributes, you can keep your routing logic close to your controllers, maintaining military-grade security and optimized performance.
๐ Key Features
- Intuitive Attributes: Define routes directly as "decorators" on your controller methods.
- Controller-Level Groups: Define shared prefixes, middleware, and names at the class level.
- Advanced Throttling: Support for tiered, repeatable
#[RateLimit]attributes. - Unified Validation: Inline
#[Validate]attribute for automated request validation. - Role/Policy Security: Seamless integration with Laravel Gates and Policies via
#[Authorize]. - High Performance: Optimized
RouteTreematching and production-readyRouteCache. - Military-Grade Security: Namespace whitelisting and path injection prevention out of the box.
๐ฆ Installation
Install the package via composer:
composer require attr-route/laravel-attribute-route
Publish the config file:
php artisan vendor:publish --provider="AttrRoute\AttributeRoute\AttributeRouteServiceProvider" --tag="config"
Smart Route Inference
The package automatically infers missing route properties from your controller methods, reducing boilerplate:
#[Route(method: 'GET')] public function showProfile() { ... } // Result: URI = /show-profile, Name = show-profile
- Paths: CamelCase methods are automatically converted to kebab-case URIs.
- Names: Route names are inferred from the method name if not explicitly provided.
Attribute "Decorators"
Using the built-in RouteAttributeMiddleware, attributes like #[Validate] and #[Authorize] behave like decorators, executing logic before your controller method:
#[Route(method: 'POST', path: '/users')] #[Validate(rules: ['email' => 'required|email'])] public function store(Request $request) { ... }
๐งช Enterprise Testing
The package includes a comprehensive suite of tests:
- Unit Tests: Isolated testing for core services.
- Feature Tests: Full integration testing via Orchestra Testbench.
Run tests using PHPUnit:
vendor/bin/phpunit
โ๏ธ Configuration
The config/route-attributes.php file allows you to customize:
scan_paths: Which directories should be scanned for attributes.allowed_namespaces: Whitelist of namespaces for secure discovery.cache: Enable/disable production route caching.
๐ก๏ธ Security
This package enforces strict security policies by default:
- Namespace Whitelisting: Only controllers in allowed namespaces are scanned.
- Injection Blocking: Route paths are validated against malicious character patterns.
- State-Change Protection: Automated checks for state-changing HTTP methods.
๐ Performance
- Lazy Loading: Attributes are parsed via Reflection without instantiating controllers.
- Optimized Matching: Uses a segment-based tree for fast route lookups.
- Route Caching: Supports serialized route maps for zero-latency production boots.
๐ค Contributing
Please see CONTRIBUTING for details.
๐ License
The MIT License (MIT). Please see License File for more information.