1

我正在尝试为我的 Angular 应用程序构建 Slim Framework Version 4 api。

在我提出的每一个请求中,我都会得到

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 按预期工作正常。但是我每次通话都会看到这个错误。

我该如何克服这一点。

如果我尝试从浏览器调用 get ,则没有错误。

在此处输入图像描述

如果我进行 ajax 调用,网络选项卡不会显示错误

在此处输入图像描述

但是我的命令提示符抛出了这个错误

在此处输入图像描述

编辑 1

添加路由定义

$app->get('/',  '\App\Controllers\HomeController:home');
$app->post('/login',  '\App\Controllers\UserController:login');

编辑 2

添加角度代码

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

4

2 回答 2

1

我对 CORS 引起的 POST 请求(不是 GET )有同样的错误。

我添加了路由( 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

于 2020-04-28T18:25:35.537 回答
0

部署 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>

C。最后在浏览器中可以打开:http://localhost/

于 2021-11-10T15:51:03.240 回答