1. Go to this page and download the library: Download dentro/yalr library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
namespace App\Http\Routes;
use Dentro\Yalr\BaseRoute;
class DefaultRoute extends BaseRoute
{
/**
* Register routes handled by this class.
*
* @return void
*/
public function register(): void
{
// Make an awesome route
}
}
namespace App\Http\Routes;
use Dentro\Yalr\BaseRoute;
class DefaultRoute extends BaseRoute
{
protected string $prefix = 'wonderful';
protected string $name = 'wonderful';
/**
* Register routes handled by this class.
*
* @return void
*/
public function register(): void
{
$this->router->get('/', function () {
return view('welcome');
});
}
}
namespace App\Http\Routes;
use Dentro\Yalr\BaseRoute;
use App\Http\Controllers\HomeController;
class DefaultRoute extends BaseRoute
{
/**
* Register routes handled by this class.
*
* @return void
*/
public function register(): void
{
$this->router->get('/', [
'uses' => $this->uses('index')
]);
}
/**
* Controller used by this route.
*
* @return string
*/
public function controller(): string
{
return HomeController::class;
}
}
namespace App\Http;
use Dentro\Yalr\Contracts\Bindable;
class RouteModelBinding implements Bindable
{
public function __construct(protected Router $router)
{
}
public function bind(): void
{
$this->router->bind('fleet_hash', fn ($value) => Fleet::byHashOrFail($value));
$this->router->bind('office_slug', fn ($value) => Office::query()->where('slug', $value)->firstOrFail());
}
}
namespace App\Http;
use Dentro\Yalr\Contracts\Bindable;
class RouteRateLimiter implements Bindable
{
public function __construct(protected Router $router)
{
}
public function bind(): void
{
RateLimiter::for('api', function (Request $request) {
return Limit::perMinute(360)->by($request->user()?->email.$request->ip());
});
}
}
#[Middleware(['auth:sanctum', 'verified'])]
class DashboardController extends Controller
{
#[Get('dashboard', name: 'dashboard')]
public function index(): Response
{
return Inertia::render('Dashboard');
}
}
namespace App\Http\Controllers;
use Dentro\Yalr\Attributes\Get;
use Dentro\Yalr\Attributes\Post;
use Dentro\Yalr\Attributes\Put;
use Dentro\Yalr\Attributes\Delete;
use Dentro\Yalr\Attributes\Prefix;
use Dentro\Yalr\Attributes\Name;
#[Prefix('users')]
#[Name('users', dotSuffix: true)]
class UserController extends Controller
{
#[Get('/', name: 'index')]
public function index()
{
// GET /users
// Route name: users.index
return view('users.index');
}
#[Get('/create', name: 'create')]
public function create()
{
// GET /users/create
// Route name: users.create
return view('users.create');
}
#[Post('/', name: 'store')]
public function store()
{
// POST /users
// Route name: users.store
// ... store logic
return redirect()->route('users.index');
}
#[Get('/{id}', name: 'show')]
public function show($id)
{
// GET /users/{id}
// Route name: users.show
return view('users.show', ['user' => User::findOrFail($id)]);
}
#[Get('/{id}/edit', name: 'edit')]
public function edit($id)
{
// GET /users/{id}/edit
// Route name: users.edit
return view('users.edit', ['user' => User::findOrFail($id)]);
}
#[Put('/{id}', name: 'update')]
public function update($id)
{
// PUT /users/{id}
// Route name: users.update
// ... update logic
return redirect()->route('users.show', $id);
}
#[Delete('/{id}', name: 'destroy')]
public function destroy($id)
{
// DELETE /users/{id}
// Route name: users.destroy
// ... delete logic
return redirect()->route('users.index');
}
}
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Dentro\Yalr\Attributes\Get;
use Dentro\Yalr\Attributes\Middleware;
use Dentro\Yalr\Attributes\Prefix;
use Dentro\Yalr\Attributes\Name;
use Dentro\Yalr\Attributes\Domain;
#[Prefix('admin/dashboard')]
#[Name('admin.dashboard')]
#[Middleware(['auth', 'admin'])]
// You can also set a specific domain for these routes
#[Domain('admin.example.com')]
class DashboardController extends Controller
{
#[Get('/', name: 'index')]
public function index()
{
// GET /admin/dashboard
// Route name: admin.dashboard.index
// Applied middleware: auth, admin
return view('admin.dashboard.index');
}
// You can override or add route-specific middleware
#[Get('/stats', name: 'stats')]
#[Middleware(['cache:60'])]
public function stats()
{
// GET /admin/dashboard/stats
// Route name: admin.dashboard.stats
// Applied middleware: auth, admin, cache:60
return view('admin.dashboard.stats');
}
#[Get('/settings', name: 'settings')]
// You can provide a specific route middleware for this method only
#[Middleware(['can:edit-settings'])]
public function settings()
{
// GET /admin/dashboard/settings
// Route name: admin.dashboard.settings
// Applied middleware: auth, admin, can:edit-settings
return view('admin.dashboard.settings');
}
}
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Dentro\Yalr\Attributes\Get;
use Dentro\Yalr\Attributes\Post;
use Dentro\Yalr\Attributes\Put;
use Dentro\Yalr\Attributes\Delete;
use Dentro\Yalr\Attributes\Prefix;
use Dentro\Yalr\Attributes\Middleware;
use Dentro\Yalr\Attributes\Name;
#[Prefix('api/v1/posts')]
#[Name('api.posts')]
#[Middleware(['auth:sanctum'])]
class PostController extends Controller
{
#[Get('/', name: 'index')]
public function index()
{
// GET /api/v1/posts
// Route name: api.posts.index
return Post::all();
}
#[Post('/', name: 'store')]
public function store(Request $request)
{
// POST /api/v1/posts
// Route name: api.posts.store
$post = Post::create($request->validated());
return response()->json($post, 201);
}
#[Get('/{id}', name: 'show')]
public function show($id)
{
// GET /api/v1/posts/{id}
// Route name: api.posts.show
return Post::findOrFail($id);
}
#[Put('/{id}', name: 'update')]
public function update(Request $request, $id)
{
// PUT /api/v1/posts/{id}
// Route name: api.posts.update
$post = Post::findOrFail($id);
$post->update($request->validated());
return $post;
}
#[Delete('/{id}', name: 'destroy')]
public function destroy($id)
{
// DELETE /api/v1/posts/{id}
// Route name: api.posts.destroy
Post::findOrFail($id)->delete();
return response()->noContent();
}
}
'injects' => [
'web' => [
'app/Http/Controllers/Web/', // For controllers with attributes
'app/Http/Routes/Web/', // For route wrapper classes
'app/Http/Controllers/Admin/'
],
'api' => 'app/Http/Controllers/Api/' // Single directory can be a string
],
shell
php artisan yalr:install
shell
php artisan make:route DefaultRoute
shell
php artisan make:route DefaultRoute --inject web