2017-01-24 2 views
1

Я пишу RESTful API с новым приложением Laravel 5.3.Маршруты Laravel 5.3 api перенаправляются, даже если все промежуточное программное обеспечение закомментировано

У меня есть ресурс, определенный в routes/api.php как так:

Route::resource('/simple-path', 'Api\ControllerName'); 

Там не добавляет на самом маршруте промежуточного слоя, не является ли добавлены в конструкторе этого контроллера, и не существует какой-либо промежуточный слой добавляется в любые родительские контроллеры/классы.

Однако Laravel (?) Держит 302 перенаправления на / для любого HTTP глагола, кроме GET, и я веду себя сумасшедшего пытаюсь выяснить, почему. Даже если я прокомментирую все промежуточное ПО в app/Http/Kernel.php, он все равно перенаправляет каждый раз, когда я запускаю простой запрос POST на /simple-path в curl или PostMan.

Теперь, не поймите меня неправильно, я хочу в auth:api межплатформенную на моем API, особенно для POST или PUT запросов, но я не могу понять, что является причиной его перенаправления, когда нет какого-либо промежуточное программное обеспечение работает в первую очередь (насколько я могу судить).

Я прочитал все документы по промежуточному программному обеспечению, которые я могу найти. Мне интересно, есть ли что-то другое, кроме промежуточного программного обеспечения, которое может вызвать это? Это довольно новое приложение, поэтому я не сильно изменился с базовой установки.

+0

Вы распространяете контроллер, который выполняет промежуточное ПО уровня контроллера? https://laravel.com/docs/master/controllers#controller-middleware (поэтому в рамках метода контроллера) – Chris

+1

, если вы разместите свои маршруты/api.php 'Route :: post ('/ test', function() { return response (["message" => "test"], 200);}); 'и попытаться отправить сообщение на' http: // yourpath.com/api/test', вы получаете что-нибудь? потому что вы должны получить правильный ответ. – AfikDeri

+0

Его отлично работает без каких-либо ошибок, если вы удалили промежуточное ПО? –

ответ

0

Идти, чтобы ответить на мой собственный вопрос здесь. Перенаправление не было связано с промежуточным программным обеспечением, но из-за FormRequest. Я был тип hinting FormRequest подкласс, который я создал в функции store() на моем классе контроллера, и это заставило его запустить rules() для проверки в первую очередь. Когда он увидел, что искомое поле отсутствует, класс FormRequest перенаправлялся через собственный метод response(). Так что я просто добавил это к моему FormRequest подклассу (на данный момент):

use Illuminate\Support\Facades\Response; 

public function response(array $errors) 
{ 
    return Response::json($errors, 400); 
} 
+0

bro у меня есть некоторые сомнения относительно того же перенаправления. можете ли вы присоединиться ко мне в этой чатовой комнате chat.stackoverflow.com/rooms/135960/laravel –

1

Чтобы исправить эту переадресацию, просто установите параметр заголовка «Accept» для «приложения/JSON» при вызове Laravel API маршрутов от клиентов остальные, и будет работать нормально.