Slim 框架和 GET/PUT/POST 方法

Posted

技术标签:

【中文标题】Slim 框架和 GET/PUT/POST 方法【英文标题】:Slim framework and GET/PUT/POST methods 【发布时间】:2015-02-08 15:25:55 【问题描述】:

例如,我使用此代码来测试路线:

$app->get('/api', function ()                          
        echo 'get!';
);
$app->post('/api', function ()                             
        echo 'post!';
);
$app->put('/api', function ()                          
        echo 'put!';
);

对于 api 测试,我使用 Chrome 的 RestClient 插件。

当我尝试做 GET 请求时,响应是“get!”。挺好的。

但是:

    当我尝试执行 POST 请求时,响应也是“获取!”。为什么?它必须是“发布!”。

    当我尝试执行 PUT 请求时,(在响应标头中:允许:GET、HEAD、POST、OPTIONS、TRACE)Slim 响应有 405 错误(不允许方法)并显示消息:

“请求的方法 PUT 不允许用于 URL /api。”

我做错了什么?

【问题讨论】:

它适用于我使用 Advanced REST client 和 DHC - REST/HTTP API Client。你添加.htaccess文件了吗? 是的,这是我的 htaccess: RewriteEngine On RewriteBase / RewriteCond %REQUEST_FILENAME !-f RewriteCond %REQUEST_FILENAME !-d RewriteRule ^(.*)/$ index.php 尝试使用this one。 感谢我的朋友,辛苦了! 很高兴看到它有效。出于订购目的,我已经用解决方案创建了一个答案。 【参考方案1】:

确保您的.htaccess 如下(来自slimphp/Slim@2.x):

RewriteEngine On

# Some hosts may require you to use the `RewriteBase` directive.
# If you need to use the `RewriteBase` directive, it should be the
# absolute physical path to the directory that contains this htaccess file.
#
# RewriteBase /

RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^ index.php [QSA,L]

【讨论】:

感谢您发布此信息。 Davide Pastore 的链接对我不起作用,这就是我在拔掉头发两天后最终帮助我一切正常的原因。非常感谢。 @ramijames 感谢您的评论。我更新了我的答案,修复了损坏的链接和 .htaccess 内容。

以上是关于Slim 框架和 GET/PUT/POST 方法的主要内容,如果未能解决你的问题,请参考以下文章

Spring 框架:返回所有 METHODS 的 HTTP OPTIONS(get、put、post、delete、trace、head、options)

在Web Api中实现Http方法(Get,Put,Post,Delete)

jersey之get,put,post,delete简单使用

Rest模式get,put,post,delete含义与区别(转)

Rest模式get,put,post,delete含义与区别(转)

Rest模式get,put,post,delete含义与区别