Laravel 5 GET разрешен, но POST не разрешен

Я работаю над проектом в Laravel 5 и столкнулся с очень странной проблемой. Я пытаюсь создать раздел профиля пользователя, в котором пользователь может редактировать данные, а форма отправляется на маршрут POST profile/update.

По какой-то причине я получаю MethodNotAllowedHttpException, но я уверен, что объявил его в файле маршрутов следующим образом:

Route::post('profile/update', 'ProfileController@update');

Просто из любопытства я изменил его на GET как в файле маршрутов, так и в коде, который отправляет запрос ajax. К моему удивлению работает нормально. Я не могу понять как. По понятным причинам я не могу отправить GET запрос на обновление профиля.

Аякс-код:

$.ajax({
    url: '/profile/update',
    type: 'POST',
    dataType: 'JSON',
    data: $('form#profile-form').serialize(),
    beforeSend: function(request) {
        return request.setRequestHeader('X-CSRF-Token', $("meta[name='token']").attr('content'));
    }
});

Метод контроллера:

public function update(UpdateProfileRequest $request)
{
    $data =  $request->all();
    $data['password'] = bcrypt($data['password']);

    $user = auth()->user()->update($data);

    return response()->json(auth()->user(), 200);
}

Что я делаю не так?


person Rohan    schedule 09.05.2015    source источник
comment
Добавьте также свой код ajax.   -  person Sougata Bose    schedule 09.05.2015
comment
Да, я должен был это сделать. Вот.   -  person Rohan    schedule 09.05.2015
comment
Когда вы меняете маршрут на get, вы также меняете ajax для get?   -  person Sougata Bose    schedule 09.05.2015
comment
Да. Меняю в обоих местах. :)   -  person Rohan    schedule 09.05.2015
comment
Возможен конфликт маршрутизации. Можем ли мы увидеть весь ваш файл routes.php?   -  person Stuart Wagner    schedule 09.05.2015
comment
Если вы опасаетесь, что у меня может быть profile/{wildcard} маршрут над ним, я этого не делаю. На самом деле, я поместил этот маршрут в начало файла, чтобы убедиться, но он все равно не будет работать. Проект является своего рода частным проектом. Мой работодатель не хочет, чтобы я показывал больше кода, чем необходимо. Я надеюсь, вы хотели увидеть файл маршрутов, чтобы убедиться в подстановочном знаке. Или вы имеете в виду что-то другое?   -  person Rohan    schedule 09.05.2015
comment
Я просто хотел проверить конфликты. Попробуйте закомментировать все остальные маршруты, чтобы не было перекрытий.   -  person Stuart Wagner    schedule 09.05.2015
comment
Я пробовал комментировать. Не работает до сих пор.   -  person Rohan    schedule 09.05.2015
comment
Когда вы запускаете ajax и проверяете консоль браузера, отображается ли запрос как POST?   -  person temporalslide    schedule 09.05.2015
comment
Это действительно так. Я уже некоторое время бьюсь головой о консоль и до сих пор не могу понять, что происходит не так. Я думаю, стучать все-таки не получится. :)   -  person Rohan    schedule 09.05.2015
comment
Можете ли вы показать свой метод обновления с контроллера?   -  person Pawel Bieszczad    schedule 09.05.2015
comment
Ну вот. Это отлично работает с GET, кстати. :)   -  person Rohan    schedule 09.05.2015
comment
Если вы пропустите ajax и опубликуете форму как обычно, вы получите ту же ошибку (если да, это укажет на то, что проблема заключается в JS...) Может быть, стоит попробовать.   -  person temporalslide    schedule 09.05.2015
comment
Вы запускали php artisan route:clear, php artisan optimize и composer dump-autoload?   -  person Azeame    schedule 09.05.2015
comment
Теперь я сделал. Все равно не повезло. Он по-прежнему возвращает мне MethodNotAllowedHttpException, но когда я меняю его на get, он работает нормально.   -  person Rohan    schedule 10.05.2015


Ответы (1)


Ладно, после того, как в другой день я несколько часов помучился головой, я понял, что старый разработчик где-то оставил кусок кода в форме:

<input type="hidden" name="_method" value="put" />

И вот оно. Несмотря на то, что мой вызов ajax был POST, Laravel подумал, что это PUT. В любом случае спасибо всем, кто прокомментировал и попытался помочь. Ценить это.

person Rohan    schedule 12.05.2015