Управление страницей 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 страницу.