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

Ресурсная Web-маршрутизация

Метод Route::resource() регистрирует набор CRUD-маршрутов для одного контроллера.

Маршрут:

use Medusa\Http\Route;

Route::resource('photos', App\Controllers\PhotoController::class);

Контроллер:

namespace App\Controllers;

use Medusa\Base\Abstracts\Response as WebResponse;
use Medusa\Base\Interfaces\Resource;
use Medusa\Http\Request;
use Medusa\Http\Response;

class PhotoController implements Resource
{
    public static function index(Request $request): WebResponse
    {
        return new Response\Html(
            sprintf(
                'GET /photos | Method: index | Query params: limit %d; offset %d',
                $request->get('limit', Request::GET),
                $request->get('offset', Request::GET)
            ),
            200
        );
    }

    public static function create(): WebResponse
    {
        return new Response\Html('GET /photos/create | Method: create', 200);
    }

    public static function store(Request $request): WebResponse
    {
        $payload = $request->get('data', Request::POST);

        return new Response\Html(
            sprintf('POST /photos | Method: store | Json: %s', json_encode($payload)),
            200
        );
    }

    public static function show(string|int $id): WebResponse
    {
        return new Response\Html(
            sprintf('GET /photos/{id} | Method: show | id: #%s', $id),
            200
        );
    }

    public static function edit(string|int $id): WebResponse
    {
        return new Response\Html(
            sprintf('GET /photos/{id}/edit | Method: edit | id: #%s', $id),
            200
        );
    }

    public static function update(Request $request, string|int $id): WebResponse
    {
        $payload = $request->get('data', Request::PUT) ?? $request->get('data', Request::PATCH);

        return new Response\Html(
            sprintf('PUT/PATCH /photos/{id} | Method: update | id: #%s; Json: %s', $id, json_encode($payload)),
            200
        );
    }

    public static function destroy(string|int $id): WebResponse
    {
        return new Response\Html(
            sprintf('DELETE /photos/{id} | Method: destroy | id: #%s', $id),
            200
        );
    }
}

Результат:

Запрос Ответ
GET /photos?limit=1&offset=0 HTTP/1.1
Host: localhost:8001
GET /photos | Method: index | Query params: limit 1; offset 0
GET /photos/create HTTP/1.1
Host: localhost:8001
GET /photos/create | Method: create
POST /photos HTTP/1.1
Host: localhost:8001
Content-Type: application/json
Content-Length: 60

{
  "data": {
    "name": "photo-1",
    "type": "jpg"
  }
}
POST /photos | Method: store | Json: {"name":"photo-1","type":"jpg"}
GET /photos/1 HTTP/1.1
Host: localhost:8001
GET /photos/{id} | Method: show | id: #1
GET /photos/1/edit HTTP/1.1
Host: localhost:8001
GET /photos/{id}/edit | Method: edit | id: #1
PUT /photos/1 HTTP/1.1
Host: localhost:8001
Content-Type: application/json
Content-Length: 60

{
  "data": {
    "name": "photo-2",
    "type": "jpg"
  }
}
PUT/PATCH /photos/{id} | Method: update | id: #1; Json: {"name":"photo-2","type":"jpg"}
PATCH /photos/1 HTTP/1.1
Host: localhost:8001
Content-Type: application/json
Content-Length: 41

{
  "data": {
    "name": "photo-3"
  }
}
PUT/PATCH /photos/{id} | Method: update | id: #1; Json: {"name":"photo-3"}
DELETE /photos/1 HTTP/1.1
Host: localhost:8001
DELETE /photos/{id} | Method: destroy | id: #1