Laravel 5 POST 路由到索引而不是存储
Laravel 5 POST routes to index instead of store
我正在处理 Laravel 5 RESTful API 似乎没有正确路由 POST 请求。
这是我的 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
returns:
- GET|HEAD:api/v1/messages:api.v1.messages.index:App\Http\Controllers\IncomingMessages@index
- GET|HEAD:api/v1/messages/创建: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/{消息}:api。v1.messages.show:App\Http\Controllers\IncomingMessages@show
- GET|HEAD:api/v1/messages/{消息}/编辑:api.v1.messages.edit:App\Http\Controllers\IncomingMessages@edit
- PUT : api/v1/messages/{消息} :api.v1.messages.update ; App\Http\Controllers\IncomingMessages@更新
- 补丁:api/v1/messages/{消息}:App\Http\Controllers\IncomingMessages@更新
- 删除:api/v1/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
成功了
问题是由于将尾随 /
添加到 URL 引起的。所以,而不是使用这个 URL:
mydomain.com/api/v1/messages/
我试过这个:
mydomain.com/api/v1/messages
成功了。
我是通过查看服务器日志发现的。这就是我发现 POST 对 URL messages/
的请求被重定向的方式。
如果您仍然遇到此问题并且路线正在使用 FormRequest
检查其中是否有 authorize
函数,因为如果 returns false
它会重定向
我正在处理 Laravel 5 RESTful API 似乎没有正确路由 POST 请求。
这是我的 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
returns:
- GET|HEAD:api/v1/messages:api.v1.messages.index:App\Http\Controllers\IncomingMessages@index
- GET|HEAD:api/v1/messages/创建: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/{消息}:api。v1.messages.show:App\Http\Controllers\IncomingMessages@show
- GET|HEAD:api/v1/messages/{消息}/编辑:api.v1.messages.edit:App\Http\Controllers\IncomingMessages@edit
- PUT : api/v1/messages/{消息} :api.v1.messages.update ; App\Http\Controllers\IncomingMessages@更新
- 补丁:api/v1/messages/{消息}:App\Http\Controllers\IncomingMessages@更新
- 删除:api/v1/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
成功了
问题是由于将尾随 /
添加到 URL 引起的。所以,而不是使用这个 URL:
mydomain.com/api/v1/messages/
我试过这个:
mydomain.com/api/v1/messages
成功了。
我是通过查看服务器日志发现的。这就是我发现 POST 对 URL messages/
的请求被重定向的方式。
如果您仍然遇到此问题并且路线正在使用 FormRequest
检查其中是否有 authorize
函数,因为如果 returns false