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

Работя по проект в Laravel 5 и съм заседнал в много странен проблем. Опитвам се да създам раздел на потребителския профил, където потребителят може да редактира подробности и формулярът се изпраща на POST маршрут profile/update.

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

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

Просто от любопитство го промених на GET както в моя файл с маршрути, така и в кода, който изпраща ajax заявката. За моя изненада работи добре. Не мога да разбера как. По очевидни причини не мога да изпратя GET заявка за актуализиране на профил.

Ajax код:

$.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 BTW. :)   -  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, но когато го променя, за да получа, работи добре.   -  person Rohan    schedule 10.05.2015


Отговори (1)


Добре, след като си блъсках главата няколко часа друг ден, разбрах, че старият разработчик е оставил някъде част от кода във формуляра:

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

И ето го. Въпреки че моето ajax повикване беше POST, Laravel реши, че е PUT. Все пак благодаря на всички, които коментираха и се опитаха да помогнат. Оценявам го.

person Rohan    schedule 12.05.2015