Laravel 13.x — Routing
File-file route terletak di folder routes.
- Otomatis dimuat oleh Laravel menggunakan konfigurasi yang ditentukan dalam file
bootstrap/app.php. - File
routes/web.phpmendefinisikan route yang ditujukan untuk antarmuka web. Route ini diberi grup middlewareweb, yang menyediakan fitur seperti session state dan perlindungan CSRF. - File
routes/api.phpuntuk API. Tidak otomatis dibuat pada project baru.
General
Metode route yang tersedia
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
Menggunakan beberapa method sekaligus:
Route::match(['get', 'post'], '/', function () {
// ...
});
Route::any('/', function () {
// ...
});
Saat mendefinisikan beberapa route dengan URI yang sama, route yang menggunakan metode get, post, put, patch, delete, dan options harus didefinisikan sebelum route yang menggunakan metode any, match, dan redirect.
Menyertakan dependency
use Illuminate\Http\Request;
Route::get('/users', function (Request $request) {
// ...
});
Web route
Route ke function
use Illuminate\Support\Facades\Route;
Route::get('/greeting', function () {
return 'Hello World';
});
Route ke controller function
use App\Http\Controllers\UserController;
Route::get('/user', [UserController::class, 'index']);
Route ke controller function dengan middleware
Route::get('/profile', [UserController::class, 'show'])->middleware('auth');
Route ke view
Route::view('/welcome', 'welcome');
Route::view('/welcome', 'welcome', ['name' => 'Taylor']);
Redirect ke route lain
Route::redirect('/here', '/there'); // Default status code 302
Route::redirect('/here', '/there', 301);
Route::permanentRedirect('/here', '/there'); // Status code 301
Tambahkan @csrf di form:
<form method="POST" action="/profile">
@csrf
...
</form>
API route
Isi default routes/api.php:
Route::get('/user', function (Request $request) {
return $request->user();
})->middleware('auth:sanctum');
Prefix /api secara otomatis ditambahkan ke route.
Prefix ini bisa diganti dengan memodifikasi file bootstrap/app.php:
->withRouting(
api: __DIR__.'/../routes/api.php',
apiPrefix: 'api/admin',
// ...
)
Route parameter
Parameter wajib
Route parameters selalu dibungkus di dalam kurung kurawal {} dan harus terdiri dari karakter alfabet atau _ (underscore).
Route::get('/user/{id}', function (string $id) {
return 'User '.$id;
});
Route::get('/posts/{post}/comments/{comment}', function (string $postId, string $commentId) {
// ...
});
Nilai parameter akan disuntikkan ke dalam callback route / controller berdasarkan urutannya.
Parameter opsional
Route::get('/user/{name?}', function (?string $name = null) {
return $name;
});
Route::get('/user/{name?}', function (?string $name = 'John') {
return $name;
});
Regular expression constraint
Jika nilai parameter tidak cocok dengan constraint yang ditetapkan untuk semua route yang sesuai, respons HTTP 404 akan dikembalikan.
Route::get('/user/{name}', function (string $name) {
// ...
})->where('name', '[A-Za-z]+');
Route::get('/user/{id}', function (string $id) {
// ...
})->where('id', '[0-9]+');
Route::get('/user/{id}/{name}', function (string $id, string $name) {
// ...
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
Route::get('/user/{id}/{name}', function (string $id, string $name) {
// ...
})->whereNumber('id')->whereAlpha('name');
Route::get('/user/{name}', function (string $name) {
// ...
})->whereAlphaNumeric('name');
Route::get('/user/{id}', function (string $id) {
// ...
})->whereUuid('id');
Route::get('/user/{id}', function (string $id) {
// ...
})->whereUlid('id');
Route::get('/category/{category}', function (string $category) {
// ...
})->whereIn('category', ['movie', 'song', 'painting']);
Global constraint
use Illuminate\Support\Facades\Route;
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Route::pattern('id', '[0-9]+');
}
Contoh constraint di atas akan diterapkan pada semua parameter dengan nama id.
Route::get('/user/{id}', function (string $id) {
// Hanya dieksekusi jika {id} adalah numerik...
});
Mengizinkan / masuk nilai parameter
Kecuali karakter / harus diizinkan secara eksplisit, dan hanya diperbolehkan pada segmen terakhir URL.
Route::get('/search/{search}', function (string $search) {
return $search;
})->where('search', '.*');
Menyertakan dependency
use Illuminate\Http\Request;
Route::get('/user/{id}', function (Request $request, string $id) {
return 'User '.$id;
});
Customize route
Route aplikasi dikonfigurasi dan dimuat oleh file bootstrap/app.php:
<?php
use Illuminate\Foundation\Application;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)->create();
Kalau mau menambahkan file route custom, tambahkan dengan menggunakan closure then:
use Illuminate\Support\Facades\Route;
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
then: function () {
Route::middleware('api')
->prefix('webhooks')
->name('webhooks.')
->group(base_path('routes/webhooks.php'));
},
)
Kalau mau ambil alih kendali penuh registrasi route, gunakan closure using:
use Illuminate\Support\Facades\Route;
->withRouting(
commands: __DIR__.'/../routes/console.php',
using: function () {
Route::middleware('api')
->prefix('api')
->group(base_path('routes/api.php'));
Route::middleware('web')
->group(base_path('routes/web.php'));
},
)
Perintah PHP Artisan
Membuat API Route
php artisan install:api
- Menginstal Laravel Sanctum, yang menyediakan API token authentication guard untuk autentikasi API
- Membuat file
routes/api.php.
Menampilkan list route
php artisan route:list
php artisan route:list -v # Disertai list middleware
php artisan route:list -vv # Lebih detail
# Hanya tampilkan route yang dimulai dengan api
php artisan route:list --path=api
# Sembunyikan route dari package pihak ketiga
php artisan route:list --except-vendor
# Hanya tampilkan route dari package pihak ketiga
php artisan route:list --only-vendor