Запросы PUT обрабатываются как запросы GET в Laravel

Я создаю API Laravel 5.8 (PHP 7.3.6), и функции GET, POST и DELETE работают нормально, но я не могу заставить PUT вести себя должным образом. Когда я использую Postman и делаю запрос PUT к "сайтам", он ведет себя как запрос GET. Методы GET, POST и DELETE ведут себя так, как я и ожидал, т.е. идут по правильным маршрутам.

Это вело себя так в IIS, но теперь я использую Docker с Apache и PHP 7.3.6, и он ведет себя так же.

Такое ощущение, что это должно быть связано с Laravel, или, может быть, я просто неправильно использую Postman. Любые идеи?

Это мой api.php...

Route::get('sites', 'SelectSites@index');
Route::get('sites/{id}', 'SelectSites@show');
Route::put('sites', 'SelectSites@create');
Route::post('sites/{id}', 'SelectSites@update');
Route::delete('sites/{id}', 'SelectSites@delete');

Это метод создания...

public function create(){
    $sites = "CREATE";
    return $sites;
}

Это docker-compose.xml...

version: '3'
services:
app:
  build:
    context: .
    dockerfile: .docker/Dockerfile
  image: laravel-docker
  ports:
    - 8086:80

Это файл VirtualHost...

<VirtualHost *:80>
DocumentRoot /srv/app/public

<Directory "/srv/app/public">
    AllowOverride all
    Require all granted
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined


    <Limit GET POST PUT DELETE>
      Order allow,deny Allow from all
    </Limit>

</VirtualHost>

ОБНОВЛЕНИЕ

Это работает локально в IIS, мне просто пришлось перезагрузить локальную машину. Он также отлично работает на веб-сервере PHP php -S 0.0.0.0:8080. Я никогда раньше не использовал PUT. Что мне нужно сделать, чтобы настроить Docker для использования PUT?


person sdexp    schedule 13.08.2019    source источник
comment
Попробуйте установить x-www-form-urlencoded для тела в почтальоне.   -  person jtwes    schedule 13.08.2019
comment
Извините, я хотел сказать, что использую x-www-form-urlencoded, и у меня даже есть ключи/значения в теле, если они нужны.   -  person sdexp    schedule 13.08.2019
comment
Правильно ли вы указываете префикс URL-адреса для маршрутов API, /api/sites? Вы абсолютно уверены, что не определили этот маршрут дважды?   -  person matticustard    schedule 13.08.2019
comment
На самом деле я немного схитрил и удалил префикс API из Сервиса в целях тестирования. 100% уверен, что он не определяется дважды.   -  person sdexp    schedule 13.08.2019
comment
Есть ли в вашей форме обычное поле подмена метода формы? Попробуйте добавить его и сделать POST, как и должна делать ваша настоящая HTML-форма.   -  person Don't Panic    schedule 14.08.2019
comment
Я использую приложение Postman, поэтому не подделываю, используя настоящий HTTP-запрос.   -  person sdexp    schedule 14.08.2019
comment
Вы можете проверить artisan route:list ?   -  person mniess    schedule 14.08.2019
comment
Как указано в ответе, у вас есть ошибка с вашими маршрутами put и post. Вы упомянули, что это не решило проблему, поэтому я предполагаю, что вы как-то обновили их - пожалуйста, обновите вопрос, указав, как сейчас выглядят ваши маршруты.   -  person Don't Panic    schedule 14.08.2019


Ответы (1)


Насколько я вижу, вы перепутали POST и PUT. Запрос POST используется для создания ресурсов, а PUT — для обновления.

person mniess    schedule 13.08.2019
comment
Хороший вопрос, спасибо. Вы правы, но я не думаю, что это было проблемой. - person sdexp; 14.08.2019