Laravel 7 условная форма метода POST | ПОЛОЖИЛ - PullRequest
0 голосов
/ 20 марта 2020

Привет! Я использую Laravel 7 и пытаюсь отправить запрос на основе следующего условия:

, если isset($category) == true, тогда метод должен быть PUT
если isset($category) == false, то метод должен измениться на POST

Метод обновления, который PUT работает нормально с ответом 302, измененным с POST на PUT . Проблема в том, что если я собираюсь отправить через метод POST в зависимости от заданного условия, оно говорит:

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException
Метод PUT не поддерживается для этого маршрута. Поддерживаемые методы: GET, HEAD, POST.

Любое предложение, как это сделать, в том же виде?

Вот мои коды:

<form action="{{ isset($category) ? route('categories.update',$category->id) : route('categories.store') }}" method="POST">
    @csrf
    @method('PUT')
        <div class="form-group">
            <label for="name">Name</label>
            <input type="text" id="name" class="form-control" name="name" value="{{ isset($category) ? $category->name : '' }}">
        </div>

   <div class="form-group">
      <button class="btn btn-success">
        {{ isset($category) ? 'Update category' : 'Add category' }}
      </button>
   </div>
</form>

Я использую Route :: resource ('Categories', 'CategoriesController');

+--------+-----------+----------------------------+--------------------+------------------------------------------------------------------------+--------------+
| Domain | Method    | URI                        | Name               | Action                                                                 | Middleware   |
+--------+-----------+----------------------------+--------------------+------------------------------------------------------------------------+--------------+
|        | POST      | categories                 | categories.store   | App\Http\Controllers\CategoriesController@store                        | web          |
|        | GET|HEAD  | categories                 | categories.index   | App\Http\Controllers\CategoriesController@index                        | web          |
|        | GET|HEAD  | categories/create          | categories.create  | App\Http\Controllers\CategoriesController@create                       | web          |
|        | DELETE    | categories/{category}      | categories.destroy | App\Http\Controllers\CategoriesController@destroy                      | web          |
|        | PUT|PATCH | categories/{category}      | categories.update  | App\Http\Controllers\CategoriesController@update                       | web          |
|        | GET|HEAD  | categories/{category}      | categories.show    | App\Http\Controllers\CategoriesController@show                         | web          |
|        | GET|HEAD  | categories/{category}/edit | categories.edit    | App\Http\Controllers\CategoriesController@edit                         | web          |
+--------+-----------+----------------------------+--------------------+------------------------------------------------------------------------+--------------+

1 Ответ

1 голос
/ 21 марта 2020

Вы должны подготовить @method('PUT'), как показано ниже:

<form action="{{ isset($category) ? route('categories.update',$category->id) : route('categories.store') }}" method="POST">
    @csrf
    @if(isset($category))
       @method('PUT')
    @endif
        <div class="form-group">
            <label for="name">Name</label>
            <input type="text" id="name" class="form-control" name="name" value="{{ isset($category) ? $category->name : '' }}">
        </div>

   <div class="form-group">
      <button class="btn btn-success">
        {{ isset($category) ? 'Update category' : 'Add category' }}
      </button>
   </div>
</form>
...