Laravel 6 - Отсутствуют обязательные параметры для [Маршрут: поставщики.destroy] [URI: поставщики / {поставщик}] - PullRequest
0 голосов
/ 11 октября 2019

У меня есть индексная страница с кнопкой для удаления столбца из таблицы.

@foreach ($suppliers as $supplier)
        <tr>
              <th>{{ $supplier -> idSupplier }}</th>
              <th style="color:blue;"><a href="/suppliers/{{$supplier->idSupplier}}">{{ $supplier -> column1 }}</a></th>
              <th>{{ $supplier -> column2 }}</th>
              <th>{{ $supplier -> column3  }}</th>
              <th>{!! $supplier -> column4 !!}</th>
              <th>
                  <a class="btn btn-warning" href="/suppliers/{{$supplier->idSupplier}}/edit" role="button">
                        <i class="fa fa-tools"></i>
                  Edit</a>
                  <a class="btn btn-danger" href="{{ action('SuppliersController@destroy') }}" role="button">
                        <i class="fa fa-eraser"></i>
                  Delete</a>
              </th>
        </tr>
@endforeach

, но теперь каждый раз, когда я открываю свою индексную страницу, появляется сообщение об ошибке

Фасад \ Зажигание \ Исключения \ ViewException Отсутствуют обязательные параметры для [Маршрут: поставщики.destroy] [URI: поставщики / {поставщик}]. (Представление: C: \ xampp \ htdocs \ Invent \ resources \ views \ поставщики \ index.blade.php)

это мой маршрут

Route::resource('suppliers', 'SuppliersController');

и это destroy функция из SuppliersController

public function destroy($idSupplier)
    {
        $supplier = Supplier::find($idSupplier);
        $supplier->delete();
        return redirect('/suppliers')->with('success', 'Supplier removed');
    }

Я уже пробовал это решение , и оно дает мне еще одно сообщение об ошибке.

Ответы [ 3 ]

2 голосов
/ 11 октября 2019

хорошо, вы не передаете обязательный параметр для действия контроллера. Метод destroy получает параметр idSupplier для выполнения своих действий. из блейда вы просто вызываете действие контроллера, не передавая параметр. сделайте это, как показано ниже:

<a class="btn btn-danger" href="{{ action('SuppliersController@destroy', ['idSupplier' => $supplier->idSupplier]) }}" role="button">
    <i class="fa fa-eraser"></i>
    Delete
</a>

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

<form action="{{ route('suppliers.destroy', $supplier->idSupplier) }}" method="POST">
    @csrf
    @method('DELETE')
    <button class="btn btn-danger btn-sm" title="Delete">Delete</button>
</form>
0 голосов
/ 11 октября 2019

вы вызываете метод de destroy без параметров, которые вы можете сделать следующим образом

 @foreach ($suppliers as $supplier)
    <tr>
          <th>{{ $supplier -> idSupplier }}</th>
          <th style="color:blue;"><a href="/suppliers/{{$supplier->idSupplier}}">{{ $supplier -> column1 }}</a></th>
          <th>{{ $supplier -> column2 }}</th>
          <th>{{ $supplier -> column3  }}</th>
          <th>{!! $supplier -> column4 !!}</th>
          <th>
              <a class="btn btn-warning" href="/suppliers/{{$supplier->idSupplier}}/edit" role="button">
                    <i class="fa fa-tools"></i>
              Edit</a>
              <a class="btn btn-danger" href="{{ route('suppliers.destroy',$supplier->idSupplier ) }}" role="button">
                    <i class="fa fa-eraser"></i>
              Delete</a>
          </th>
    </tr>
 @endforeach
0 голосов
/ 11 октября 2019

Я бы предложил некоторые улучшения, используя модальное подтверждение. Затем я отправлю форму контроллеру.

В следующем примере показано, что вы используете Bootstrap и laravelCollective . (Код был упрощен)

1. Кнопка удаления

<a href="#" data-toggle="modal" data-target="#modal1">Delete</a>

2. Модал

<div class="modal" id="modal1">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-footer">
                <button type="button" data-dismiss="modal">Cancel</button> 
                <button type="button">Delete</button>
            </div>
        </div>
    </div>
</div>

3. Форма

{{ Form::open(['method' => 'DELETE', 'route' => array('suppliers.destroy', $supplier->id) ]) }}
  {{ Form::hidden('id', $supplier->id) }}
  <button type="submit">Delete</button>
{{ Form::close() }}

Обратите внимание, как идентификатор поставщика ($ idSupplier) передается из формы в контроллер.

...