【问题标题】:Laravel 5 POST routes to index instead of storeLaravel 5 POST 路由到索引而不是存储
【发布时间】: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


【解决方案1】:

如果您仍然遇到此问题并且路由正在使用FormRequest

检查其中是否有authorize 函数,因为如果返回false,它将重定向

【讨论】:

    【解决方案2】:

    问题是由于在 URL 中添加了尾随 /。所以,不要使用这个 URL:

    mydomain.com/api/v1/messages/

    我试过这个:

    mydomain.com/api/v1/messages

    它成功了。

    我是通过查看服务器的日志发现的。这就是我发现对 URL messages/ 的 POST 请求被重定向的原因。

    【讨论】:

    • PUT mydomain.com/api/v1/messages/(不传递 id)是重定向 index() 或列表。有没有限制它的选项?
    • @San,在这种情况下你不应该使用 Route::resource(),使用 Route::put('/api/v1/messages', YourController@yourMethod.
    猜你喜欢
    • 2021-07-06
    • 2016-02-27
    • 2015-06-01
    • 2016-03-14
    • 2018-02-12
    • 2014-09-27
    • 1970-01-01
    • 2021-06-18
    • 2015-05-23
    相关资源
    最近更新 更多