Маршруты POST Laravel 5 для индексации вместо хранения

Я работаю над RESTful API Laravel 5, который, похоже, неправильно маршрутизирует запросы 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:

  • GET | HEAD: api / v1 / messages: api.v1.messages.index: App \ Http \ Controllers \ IncomingMessages @ index
  • ПОЛУЧИТЬ | ГОЛОВКА: 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; Приложение \ Http \ Controllers \ IncomingMessages @ обновление
  • ПАТЧ: api / v1 / messages / {messages}: App \ Http \ Controllers \ IncomingMessages @ update
  • УДАЛИТЬ: api / v1 / messages / {messages}: api.v1.messages.destroy: App \ Http \ Controllers \ IncomingMessages @ destroy

Итак, мой вопрос:

Что мне не хватает? Почему он направляется на index(), а не на store()?

ПРИМЕЧАНИЯ:

  • Я отключил VerifyCsrfToken в Kernel.php
  • Я пытаюсь выполнить запросы с помощью плагина Chromium "Почтальон".

ОБНОВЛЕНИЕ:

Проблема заключалась в добавлении завершающего / к URL-адресу. Итак, вместо использования этого URL:

mydomain.com/api/v1/messages/

Я пробовал с этим:

mydomain.com/api/v1/messages

и это сработало


person Arangor    schedule 08.07.2015    source источник
comment
Привет, брат, запустите эту команду php artisan routes и покажите мне результат, пожалуйста.   -  person Zakaria Acharki    schedule 09.07.2015
comment
Привет, @ZakariaAcharki, я отредактировал свой вопрос, чтобы показать, что возвращает php artisan.   -  person Arangor    schedule 09.07.2015
comment
Корни выглядят нормально, вы уверены, что запрос POST. попробуйте выполнить эту строку в консоли и проверьте ответ: $.post( "api/v1/messages", function( data ) { console.log( data ); });   -  person Zakaria Acharki    schedule 09.07.2015
comment
@ZakariaAcharki, ты мне подсказал. Я проверил журналы Apache и обнаружил, что для каждого POST было 301 редирект. Наконец я понял, что добавляю завершающий '/' к URL-адресу. Снятие его исправило.   -  person Arangor    schedule 09.07.2015
comment
У меня такая же проблема, но удаление конечных косых черт ничего не дало ...   -  person Inigo    schedule 12.02.2017
comment
@Inigo Я обнаружил проблему, просмотрев журнал веб-сервера. Я увидел там, что каждый запрос POST перенаправлялся.   -  person Arangor    schedule 13.02.2017
comment
Да, моя проблема была не в концевых косых чертах, а в проверке, которая автоматически перенаправлялась на ресурс / индекс. Странно, что по умолчанию не отображается ошибка валидации. Спасибо за помощь.   -  person Inigo    schedule 14.02.2017
comment
Пожалуйста, добавьте свое решение в качестве ответа и примите его :)   -  person Alfabravo    schedule 01.06.2017
comment
Спасибо за редактирование и предложение @Alfabravo.   -  person Arangor    schedule 02.06.2017


Ответы (2)


Проблема была вызвана добавлением к URL-адресу завершающего /. Итак, вместо использования этого URL:

mydomain.com/api/v1/messages/

Я пробовал с этим:

mydomain.com/api/v1/messages

и это сработало.

Я обнаружил это, просмотрев журнал сервера. Так я обнаружил, что запросы POST к URL messages/ были перенаправлены.

person Arangor    schedule 02.06.2017
comment
PUT mydomain.com/api/v1/messages/ (без передачи идентификатора) - это индекс перенаправления () или листинг. Есть ли возможность его ограничить? - person San; 24.07.2018
comment
@San, в этом случае вам не следует использовать Route :: resource (), используйте Route :: put ('/ api / v1 / messages', YourController @ yourMethod. - person Arangor; 25.07.2018

если проблема не исчезла, а маршрут использует FormRequest

проверьте, есть ли в нем функция authorize, потому что она будет перенаправлять, если она вернет false

person Ahmed Aboud    schedule 06.07.2020