Форма пользовательского интерфейса Elment с запросом PUT

Я пытаюсь получить некоторые данные в таблице, когда я отправляю данные для создания нового элемента, он показывает мне Failed to load resource: the server responded with a status of 405 (Method Not Allowed)

Я работаю с формой element ui. Я не знаю, есть ли способ изменить метод запроса

Это мой код формы:

   <el-dialog :title="formTitle" :visible.sync="supplierFormVisible">
      <div class="form-container">
        <el-form ref="supplierForm" :model="currentSupplier" label-position="left" label-width="150px" style="max-width: 500px;">
          <el-form-item label="Proveedor" prop="proveedor">
            <el-input v-model="currentSupplier.proveedor" />
          </el-form-item>
          <el-form-item label="Marca" prop="marca">
            <el-input v-model="currentSupplier.marca" />
          </el-form-item>
          <el-form-item label="Contacto" prop="contacto">
            <el-input v-model="currentSupplier.contacto" />
          </el-form-item>
          <el-form-item label="Telefono" prop="telefono">
            <el-input v-model="currentSupplier.telefono" />
          </el-form-item>
          <el-form-item label="Email" prop="email">
            <el-input v-model="currentSupplier.email" />
          </el-form-item>
          <el-form-item label="Pais" prop="pais">
            <el-input v-model="currentSupplier.pais" />
          </el-form-item>
          <el-form-item label="Direccion" prop="direccion">
            <el-input v-model="currentSupplier.direccion" />
          </el-form-item>
          <el-form-item label="Calidad" prop="calidad">
            <el-input v-model="currentSupplier.calidad" />
          </el-form-item>
          <el-form-item label="Pedidos" prop="pedidos">
            <el-input v-model="currentSupplier.pedidos" />
          </el-form-item>
        </el-form>
        <div slot="footer" class="dialog-footer">
          <el-button @click="supplierFormVisible = false">
            Cancel
          </el-button>
          <el-button type="primary" @click="handleSubmit()">
            Confirm
          </el-button>
        </div>
      </div>

Маршруты error

ОБНОВИТЬ:

Заметил, что метод исходит из файла api/resources.js

  update(id, resource) {
    return request({
      url: '/' + this.uri + '/' + id,
      method: 'post',
      data: resource,
    });
  }

Если я изменю метод публикации, не получите ошибку, но не обновляйте и не добавляйте элемент в список.


person daultimate    schedule 02.12.2019    source источник
comment
Можете ли вы обновить свой вопрос, чтобы прояснить ситуацию, потому что я не знаю, какой метод маршрута вы пытаетесь достичь   -  person Bader    schedule 08.12.2019
comment
Что говорит журнал сервера после того, как вы измените его на POST?   -  person Randy Lam    schedule 09.12.2019


Ответы (2)


Поскольку вы не указали method в форме, по умолчанию будет get. Чтобы изменить это, вы должны предоставить method следующим образом:

<el-form ref="supplierForm" :model="currentSupplier" label-position="left" label-width="150px" style="max-width: 500px;" method="put">

В качестве альтернативы вы также можете решить это с помощью запроса ajax, используя fetch или axios

person dreijntjens    schedule 03.12.2019
comment
Большое спасибо за ваш ответ, я применил ваше решение с указанием метода и не решил проблему, все еще получая 405 (Method Not Allowed) - person daultimate; 03.12.2019
comment
Какой запрос отправляет браузер? - person dreijntjens; 03.12.2019
comment
ПОСТАВИТЬ запрос. он должен использовать POST. - person daultimate; 03.12.2019
comment
Метод взят из файла api/resources.js. ' update(id, resource) { return request({ url: '/' + this.uri + '/' + id, method: 'post', data: resource, }); } Если я изменю метод на POST, ошибки больше не будет, но он не добавит и не обновит список. - person daultimate; 03.12.2019

Твоя проблема:

Вы определили для маршрута api/suppliers/{supplier} только методы GET|HEAD|PUT|PATCH|DELETE, но пытаетесь вызвать его методом POST. Это приводит к 405.

Другая проблема заключается в том, что формы не поддерживают PUT|PATCH|DELETE методов, поэтому вам приходится их имитировать (в laravel это называется подмена метода).

Вы можете добавить это в свою форму в шаблоне блейда:

@method('PUT')

или это в шаблоне vue:

<input type="hidden" name="_method" value="PUT">
person Mischa    schedule 09.12.2019