К содержанию
Meduza
Документация

Web-маршрутизация

Web-маршруты объявляются в файле routes.php:

use App\Http\Route;
use App\Http\Request;
use App\Http\Response;

Route::any('/greeting', function (Request $request) {
    $response = new Response(
        new Response\Result(['message' => 'Hello, the framework!'], 200)
    );

    echo print_r($response->get(), true);
});

При необходимости их можно вынести в отдельные файлы и подключить через include_file().

include_file('/routes/web.php');

Типы обработчиков маршрутов

Маршрут можно обработать замыканием, статическим методом контроллера или методом объекта.

1. Замыкание

Route::any('/greeting', function (Request $request) {
    $response = new Response(
        new Response\Result(['message' => 'Hello, the framework!'], 200)
    );

    echo print_r($response->get(), true);
});

2. Статический метод контроллера

Route::any('/greeting', [App\Controllers\GreetingController::class, 'index']);

// или

Route::any('/greeting', 'App\Controllers\GreetingController::index');

Пример контроллера:

namespace App\Controllers;

use App\Http\Request;
use App\Http\Response;

class GreetingController
{
    public static function index(Request $request): void
    {
        $response = new Response(
            new Response\Result(['message' => 'Hello, the framework!'], 200)
        );

        echo print_r($response->get(), true);
    }
}

3. Метод объекта

Route::any('/greeting', [new App\Controllers\GreetingController(), 'index']);

Пример контроллера:

namespace App\Controllers;

use App\Http\Request;
use App\Http\Response;

class GreetingController
{
    public function index(Request $request): void
    {
        $response = new Response(
            new Response\Result(['message' => 'Hello, the framework!'], 200)
        );

        echo print_r($response->get(), true);
    }
}

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) {
    $response = new Response(
        new Response\Result(['message' => 'Hello, the framework!'], 200)
    );

    echo print_r($response->get(), true);
});

Параметры маршрута

Параметры маршрута позволяют передавать данные через динамические сегменты URL. Параметры заключаются в фигурные скобки {}.

Route::any('/user/{id}', function (Request $request, int $id) {
    $response = new Response(
        new Response\Result(["User #$id"], 200)
    );

    echo print_r($response->get(), true);
});

При переходе по адресу http://localhost:8001/user/1 значение $id будет равно 1, а ответ будет таким:

Array
(
  [result] => Array
    (
      [0] => User #1
    )
)

Можно объявлять несколько параметров в одном маршруте:

Route::any('/posts/{postId}/comments/{commentId}', function (Request $request, int $postId, int $commentId) {
    $response = new Response(
        new Response\Result(["Post #$postId", "Comment #$commentId"], 200)
    );

    echo print_r($response->get(), true);
});