Первое, с чем придется столкнуться разработчику в MVC-фрэймворках - это маршрутизация. Laravel - не исключение. Маршруты приложения в Laravel находится в файле /routes/web.php
Маршрутизация Laravel достаточна проста и не требует дополнительных настроек. Например, так выглядит прослушка маршрута /greeting
, и которая выводит фразу Hello World
use Illuminate\Support\Facades\Route; Route::get('/greeting', function () { return 'Hello World'; });
Однако, согласно концепции MVC, маршрут должен ссылаться на экшн контроллера. Вот так выглядит ссылка на экшн index контроллера UserController
use App\Http\Controllers\UserController Route::get('/user', [UserController::class, 'index']);
Маршрутизатор позволяет регистрировать маршруты, отвечающие на любой HTTP-запрос:
Route::get($uri, $callback); Route::post($uri, $callback); Route::put($uri, $callback); Route::patch($uri, $callback); Route::delete($uri, $callback); Route::options($uri, $callback);
Иногда возникает необходимость зарегистрировать маршрут, который прослушивает несколько HTTP-запросов. Вы можете сделать это, используя метод match
. Или вы даже можете зарегистрировать маршрут, который отвечает на все HTTP-команды, используя метод any
:
Route::match(['get', 'post'], '/', function () { // }); Route::any('/', function () { // });
К маршрутам можно добавлять переменные
Route::get('/user/{id}', function ($id) { return 'User '.$id; });
Маршруты с регулярными выражениями:
Route::get('/user/{name}', function ($name) { // })->where('name', '[A-Za-z]+'); Route::get('/user/{id}', function ($id) { // })->where('id', '[0-9]+'); Route::get('/user/{id}/{name}', function ($id, $name) { // })->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
Для удобства в некоторых часто используемых шаблонах регулярных выражений есть вспомогательные методы, которые позволяют быстро добавлять ограничения шаблонов к маршрутам:
Route::get('/user/{id}/{name}', function ($id, $name) { // })->whereNumber('id')->whereAlpha('name'); Route::get('/user/{name}', function ($name) { // })->whereAlphaNumeric('name'); Route::get('/user/{id}', function ($id) { // })->whereUuid('id');
Имеется возможность создавать именнованные маршруты
Route::get( '/user/profile', [UserProfileController::class, 'show'] )->name('profile');
К таким маршрутам можно обратиться с помощью хелпера route
:
@route('profile')
Для добавление промежуточного программного обеспечения можно создавать группы маршрутов:
Route::middleware(['first', 'second'])->group(function () { Route::get('/', function () { // Uses first & second middleware... }); Route::get('/user/profile', function () { // Uses first & second middleware... }); });