Web-маршрутизация
Web-маршруты объявляются в файле www/routes/web.php:
use Medusa\Http\Route;
use Medusa\Http\Request;
use Medusa\Http\Response;
Route::any('/greeting', function (Request $request) {
return new Response\Html('Hello, the framework!', 200);
});
Типы обработчиков маршрутов
Маршрут можно обработать замыканием, статическим методом контроллера или методом объекта.
1. Замыкание
Route::any('/greeting', function (Request $request) {
return new Response\Html('Hello, the framework!', 200);
});
2. Статический метод контроллера
Route::any('/greeting', [App\Controllers\GreetingController::class, 'index']);
// или
Route::any('/greeting', 'App\Controllers\GreetingController::index');
Пример контроллера:
namespace App\Controllers;
use Medusa\Base\Abstracts\Response as WebResponse;
use Medusa\Http\Request;
use Medusa\Http\Response;
class GreetingController
{
public static function index(Request $request): WebResponse
{
return new Response\Html('Hello, the framework!', 200);
}
}
3. Метод объекта
Route::any('/greeting', [new App\Controllers\GreetingController(), 'index']);
Пример контроллера:
namespace App\Controllers;
use Medusa\Base\Abstracts\Response as WebResponse;
use Medusa\Http\Request;
use Medusa\Http\Response;
class GreetingController
{
public function index(Request $request): WebResponse
{
return new Response\Html('Hello, the framework!', 200);
}
}
Контракт обработчика
Обработчик Web-маршрута должен вернуть объект, реализующий абстрактный класс
Medusa\Base\Abstracts\Response, например Medusa\Http\Response\Html для обычной Web-страницы.
Для JSON-ответов лучше использовать API-маршруты и типы
Medusa\Http\Response\JsonResult/Medusa\Http\Response\JsonError.
HTTP-методы
Метод Route::any() регистрирует маршрут для всех поддерживаемых HTTP-методов. При необходимости можно
указать конкретный метод.
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Если один маршрут должен отвечать на несколько методов, используйте Route::match().
Route::match(['get', 'post'], '/greeting', function (Request $request) {
return new Response\Html('Hello, the framework!', 200);
});
Параметры маршрута
Параметры маршрута позволяют передавать данные через динамические сегменты URL. Параметры заключаются в фигурные
скобки {}.
Route::any('/user/{id}', function (Request $request, int $id) {
return new Response\Html("User #$id", 200);
});
При переходе по адресу http://localhost:8001/user/1 значение
$id будет равно 1, а ответ будет таким:
User #1
Можно объявлять несколько параметров в одном маршруте:
Route::any('/posts/{postId}/comments/{commentId}', function (Request $request, int $postId, int $commentId) {
return new Response\Html("Post #$postId; Comment #$commentId", 200);
});