Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Управление страницей 405 (NOT ALLOWED)

В случае если запрашивают url, pattern которого зарегистрирован, но вы вызываете с неправильным HTTP METHOD, например зарегистрирован GET /, а вы вызываете POST /.

Вы можете переопределить стандартный обработчик, а также добавить свои middlewares.

Настройка этих параметров осуществляется в App\Project при создании \Cekta\Framework\HTTP\Module() можно передать опциональные параметры:

handler_405 имя класса обработчика который использовать для обработки 405 страницы, должен реализовать интерфейс \Psr\Http\Server\RequestHandlerInterface.
DEFAULT: \Cekta\Framework\HTTP\Handler\NotFound::class

middlewares_405 - массив строк имен классов middlewares которые будут вызываться при обработке страницы 405, каждый класс должен реализовывать \Psr\Http\Server\MiddlewareInterface.
DEFAULT: []

Изменение страницы 405.

src/Project.php

new \Cekta\Framework\HTTP\Module(
    handler_405: App\MyHandler405::class,
),

src/MyHandler405.php - расположить можно где угодно, следуйте psr-4.

<?php

declare(strict_types=1);

namespace App;

use Cekta\Framework\HTTP\Response\JSONFactory;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;

final readonly class MyHandler405 implements RequestHandlerInterface
{
    public function __construct(
        private JSONFactory $factory
    ) {
    }

    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        return $this->factory->create([
                'message' => 'new 405 handler',
                ...$request->getAttributes(),
            ],
            405
        );
    }
}

Перезапустим (build и перезапуск app):

make restart

Откроем 405 страницу, например с помощью curl.

curl --request POST http://localhost:8080

Увидим обновленную 405 страницу.