【发布时间】:2015-09-27 02:08:14
【问题描述】:
我正在开发一个似乎无法正确路由 POST 请求的 Laravel 5 RESTful API。
这是我的 routes.php:
Route::group(array('prefix' => 'api/v1'), function()
{
Route::resource('messages', 'IncomingMessages');
});
这是我的控制器:
class IncomingMessages extends Controller
{
public function index() {
return "This is index";
}
public function store() {
return "This is store";
}
public function update() {
return "This is update";
}
}
这就是发生的事情:
- 请求
GET mydomain.com/api/v1/messages/--> 这是索引 - 请求
PUT mydomain.com/api/v1/messages/1--> 这是更新 - 请求
POST mydomain.com/api/v1/messages/--> 这是索引
这是php artisan route:list 返回的内容:
- GET|HEAD:api/v1/messages:api.v1.messages.index:App\Http\Controllers\IncomingMessages@index
- GET|HEAD:api/v1/messages/create:api.v1.messages.create:App\Http\Controllers\IncomingMessages@create
- POST : api/v1/messages : api.v1.messages.store : App\Http\Controllers\IncomingMessages@store
- GET|HEAD:api/v1/messages/{messages}:api.v1.messages.show:App\Http\Controllers\IncomingMessages@show
- GET|HEAD:api/v1/messages/{messages}/edit:api.v1.messages.edit:App\Http\Controllers\IncomingMessages@edit
- PUT : api/v1/messages/{messages} :api.v1.messages.update ; App\Http\Controllers\IncomingMessages@update
- 补丁:api/v1/messages/{messages}:App\Http\Controllers\IncomingMessages@update
- 删除:api/v1/messages/{messages}:api.v1.messages.destroy:App\Http\Controllers\IncomingMessages@destroy
所以,我的问题是:
我错过了什么?为什么是路由到index()而不是路由到store()?
注意事项:
- 我在
Kernel.php中禁用了“VerifyCsrfToken” - 我正在尝试使用 Chromium 插件“Postman”的请求。
更新:
问题是在 URL 中添加尾随 /。所以,不要使用这个 URL:
mydomain.com/api/v1/messages/
我试过这个:
mydomain.com/api/v1/messages
成功了
【问题讨论】:
-
嗨,兄弟运行这个命令 php artisan routes 并告诉我结果。
-
嗨@ZakariaAcharki,我已经编辑了我的问题以显示 php artisan 返回的内容。
-
@ZakariaAcharki 你给了我线索。我检查了 Apache 日志,发现每个 POST 都有一个 301 重定向。我终于意识到我在 URL 中添加了一个尾随的“/”。删除它修复它。
-
@Inigo 我通过查看 Web 服务器的日志发现了问题。我在那里看到每个 POST 请求都被重定向了。
-
请添加您的解决方案作为答案并接受它:)
标签: php laravel-5 laravel-routing restful-architecture