plutuss/route-attribute-laravel

Laravel register routes using PHP attributes

0.2.0 2024-06-23 12:01 UTC

This package is auto-updated.

Last update: 2025-01-27 18:54:10 UTC


README

Laravel:

 composer require plutuss/route-attribute-laravel
php artisan vendor:publish --provider="Plutuss\Providers\RouteAttributeServiceProvider"
<?php

use Plutuss\Attributes\Route;
use Plutuss\Attributes\Middleware;

class UserController extends Controller
{
    #[Route(uri: '/users', name: 'users.index')]
    public function index()
    {
         return view('users.index')
    }
    
    #[Route(path: 'users/create', method: 'get', name: 'users.create')]
    #[Middleware('auth')] // or   #[Middleware(['auth',...])]
    public function create()
    {
         return view('users.create')
    }
    
    #[Route(path: 'users/create', method: 'post', name: 'users.store')]
    public function store()
    {
     //
    }
    
    #[Route(path: 'users/{user}', name: 'users.show')]
    public function show(\App\Models\User $user)
    {
     //
    }
    
}
<?php

use Plutuss\Attributes\Route;
use Plutuss\Attributes\Middleware;

#[Middleware('auth')] // or   #[Middleware(['auth',...])]
class UserController extends Controller
{

    #[Route(path: 'users/create', method: 'get', name: 'users.create')]  
    public function create()
    {
         return view('users.create')
    }
    
}
<?php

use Plutuss\Attributes\Route;
use Plutuss\Attributes\RouteGroup;

#[RouteGroup(middleware: 'web', prefix: 'dashboard', subdomain: '{account}.example.com', routeNamePrefix: 'dashboard.')]
class UserController extends Controller
{

    #[Route(path: 'users/create', method: 'get', name: 'users.create')]  
    public function create()
    {
         return view('users.create')
    }
    
}
  • API

  • RouteGroup(middleware: 'api', prefix: 'api')

<?php

use Plutuss\Attributes\Route;
use Plutuss\Attributes\RouteGroup;

#[RouteGroup(middleware: 'api', prefix: 'api')]
class UserController extends Controller
{

    #[Route(path: 'users',  name: 'users.index')]  
    public function index()
    {
         return response()->json([
            'users' => User::all()
        ]);
    }

    #[Route(path: 'users', method: 'post',  name: 'users.store')]  
    public function store(Request $request)
    {
         return User::create($request->all())
    }
    
}