Slim Framework выдает ошибку 405 Not Found при каждом запросе
Я пытаюсь создать Slim Framework версии 4 api для своего приложения angular.
На каждый мой запрос я получаю
Type: Slim\Exception\HttpMethodNotAllowedException
Code: 405
Message: Method not allowed. Must be one of: POST
File: G:\xampp\htdocs\slim\vendor\slim\slim\Slim\Middleware\RoutingMiddleware.php
Line: 96
Trace: #0 G:\xampp\htdocs\slim\vendor\slim\slim\Slim\Routing\RouteRunner.php(72): Slim\Middleware\RoutingMiddleware->performRouting(Object(Slim\Psr7\Request))
#1 G:\xampp\htdocs\slim\vendor\slim\slim\Slim\Middleware\ErrorMiddleware.php(98): Slim\Routing\RouteRunner->handle(Object(Slim\Psr7\Request))
#2 G:\xampp\htdocs\slim\vendor\slim\slim\Slim\MiddlewareDispatcher.php(140): Slim\Middleware\ErrorMiddleware->process(Object(Slim\Psr7\Request), Object(Slim\Routing\RouteRunner))
#3 G:\xampp\htdocs\slim\app\Middlewares\RequestUser.php(19): class@anonymous->handle(Object(Slim\Psr7\Request))
#4 G:\xampp\htdocs\slim\vendor\slim\slim\Slim\MiddlewareDispatcher.php(283): App\Middlewares\RequestUser->__invoke(Object(Slim\Psr7\Request), Object(class@anonymous))
#5 G:\xampp\htdocs\slim\vendor\slim\slim\Slim\MiddlewareDispatcher.php(81): class@anonymous->handle(Object(Slim\Psr7\Request))
#6 G:\xampp\htdocs\slim\vendor\slim\slim\Slim\App.php(211): Slim\MiddlewareDispatcher->handle(Object(Slim\Psr7\Request))
#7 G:\xampp\htdocs\slim\vendor\slim\slim\Slim\App.php(195): Slim\App->handle(Object(Slim\Psr7\Request))
#8 G:\xampp\htdocs\slim\public\index.php(42): Slim\App->run()
#9 {main}
[Tue Feb 18 11:38:13 2020] ::1:57190 [200]: /login
[Tue Feb 18 11:38:14 2020] ::1:57191 [200]: /login
Хорошая часть - мой api работает нормально, как и ожидалось. Но я вижу эту ошибку при каждом звонке.
Как я могу это преодолеть.
Если я попытаюсь позвонить из своего браузера, то ошибки не будет.
Если я сделаю вызов ajax, на вкладке Network не будет ошибок
Но моя командная строка выдает эту ошибку
Редактировать 1
Добавление определений маршрута
$app->get('/', '\App\Controllers\HomeController:home');
$app->post('/login', '\App\Controllers\UserController:login');
Редактировать 2
Добавление кода angular
login(data){
const url = environment.api+'login';
return this.http.post(url, data);
}
Ответ мне нужно добавить
$app->options('/{routes:.+}', function ($request, $response, $args) {
return $response;
});
в моем index.php, чтобы принять все запросы параметров
http://www.slimframework.com/docs/v4/cookbook/enable-cors.html
2 ответа
У меня была такая же ошибка для запроса POST (не для GET), вызванная CORS.
Я добавил маршрут ( config/routes.php):
// Post that cause an error
$app->post('/notes', NoteCreateAction::class);
// Allow preflight requests for /notes
$app->options('/notes', function (ServerRequestInterface $request, ResponseInterface $response): ResponseInterface {
return $response;
});
Решение было создано здесь: https://odan.github.io/2019/11/24/slim4-cors.html
Существует два способа развертывания PHP-SLIM FRAMEWORK V4:
1. Запустите команду композитора:
>composer start
2. Развертывание с сервером apache
а. В файле C:\xampp\apache\conf\extra\httpd-vhosts.conf раскомментируйте этот конфиг
NameVirtualHost *:80
б. В файле C:\xampp\apache\conf\extra\httpd-vhosts.conf поместите этот конфиг в конец
<VirtualHost *:80>
DocumentRoot C:\xampp\htdocs\myBackendServer
<Directory "C:\xampp\htdocs\myBackendServer">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
в. Наконец, в браузере вы можете открыть: http://localhost/