Класс Route
Класс Route предоставляет статические методы для регистрации
маршрутов, соответствующих различным HTTP-методам. Первым параметром
всегда передаётся URI-шаблон, вторым - действие, которое будет выполнено
при совпадении маршрута. В качестве действия может выступать
замыкание или строка с контроллером.
Базовое определение маршрута
Простейший маршрут возвращает текстовый ответ через замыкание:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return 'Hello, World!';
});
?>
Результат выполнения кода при переходе на главную страницу:
"Hello, World!"
Если необходимо вернуть представление (шаблон Blade),
используйте функцию view:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/welcome', function () {
return view('welcome');
});
?>
Маршруты с параметрами
Маршруты могут содержать динамические сегменты, которые передаются в замыкание как аргументы:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/user/{id}', function ($id) {
return "User ID: " . $id;
});
?>
Результат выполнения кода при переходе по адресу /user/5:
"User ID: 5"
Можно передавать несколько параметров:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/posts/{post}/comments/{comment}', function ($post, $comment) {
return "Post $post, Comment $comment";
});
?>
Результат выполнения кода при переходе по адресу /posts/10/comments/3:
"Post 10, Comment 3"
Доступные HTTP-методы
Класс Route предоставляет методы для всех
стандартных HTTP-глаголов:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/page', function () {
return 'GET request';
});
Route::post('/page', function () {
return 'POST request';
});
Route::put('/page/{id}', function ($id) {
return "PUT request for ID: $id";
});
Route::patch('/page/{id}', function ($id) {
return "PATCH request for ID: $id";
});
Route::delete('/page/{id}', function ($id) {
return "DELETE request for ID: $id";
});
?>
Регистрация маршрута для всех методов
Метод any регистрирует маршрут,
который обрабатывает все HTTP-методы:
<?php
use Illuminate\Support\Facades\Route;
Route::any('/any', function () {
return 'Handles any HTTP method';
});
?>
Маршрут с контроллером
Вместо замыкания можно указать контроллер и метод через строку:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/profile', [ProfileController::class, 'show']);
?>
Пример контроллера:
<?php
namespace App\Http\Controllers;
class ProfileController extends Controller
{
public function show()
{
return 'User profile page';
}
}
?>
Результат выполнения кода при переходе по адресу /profile:
"User profile page"
Маршруты с ограничениями
Метод where позволяет ограничить параметры
маршрута регулярными выражениями:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/user/{id}', function ($id) {
return "User ID: $id";
})->where('id', '[0-9]+');
?>
Теперь маршрут сработает только если параметр id
содержит только цифры.
Именованные маршруты
Метод name позволяет задать имя маршруту
для последующей генерации URL:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/users/{id}', function ($id) {
return "User $id";
})->name('user.profile');
?>
Генерация URL по имени маршрута:
<?php
use Illuminate\Support\Facades\Route;
$res = route('user.profile', ['id' => 15]);
echo $res;
?>
Результат выполнения кода:
"http://localhost/users/15"