CRUD Laravel 5 как связать с уничтожением контроллера ресурсов?

У меня есть ссылка

<a class="trashButton" href="{{ URL::route('user.destroy',$members['id'][$i]) }}" style="cursor: pointer;"><i class="fa fa-trash-o"></i></a> 

эта ссылка должна направить на метод destroy Usercontroller, это мой маршрут Route::resource('/user', 'BackEnd\UsersController');

UserController – это контроллер ресурсов. Но в данный момент он направляет меня к методу шоу, а не направляет на метод уничтожения

Это происходит потому, что вы запрашиваете ресурсы через метод GET вместо метода DELETE. Посмотрите:

 DELETE /photo/{photo} destroy photo.destroy GET /photo/{photo} show photo.show 

Оба маршрута имеют один и тот же URL-адрес, но заголовок-глагол идентифицирует, для вызова. Выглядит таблица RESTful . Например, через ajax вы можете отправить запрос DELETE:

 $.ajax({ url: '/user/4', type: 'DELETE', // user.destroy success: function(result) { // Do something with the result } }); 

Вам нужно отправить запрос DELETE вместо запроса GET . Вы не можете сделать это со ссылкой, поэтому вам нужно использовать запрос AJAX или форму.

Вот способ формы:

 <form action="{{ URL::route('user.destroy', $members['id'][$i]) }}" method="POST"> <input type="hidden" name="_method" value="DELETE"> <input type="hidden" name="_token" value="{{ csrf_token() }}"> <button>Delete User</button> </form> 

Если вы используете Laravel версии 5.1 или новее, вы можете использовать встроенные помощники Laravel для сокращения вашего кода:

 <form action="{{ route('user.destroy', $members['id'][$i]) }}" method="POST"> {{ method_field('DELETE') }} {{ csrf_field() }} <button>Delete User</button> </form> 

Подробнее о методу spoofing в Laravel вы можете прочитать здесь.

Я использую этот шаблон 'resources / views / utils / delete.blade.php'

 <form action="{{ $url or Request::url() }}" method="POST"> {{ method_field('DELETE') }} {{ csrf_field() }} <button type='submit' class="{{ $class or 'btn btn-danger' }}" value="{{ $value or 'delete' }}">{!! $text or 'delete' !!}</button> </form> 

Вызывается следующим образом:

 @include('utils.delete',array( 'url' => URL::route('user.destroy',$id),'text' => '<span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> delete me')) 

Если вы хотите сделать это через обычную ссылку, а не через AJAX или другой запрос формы, вы можете настроить специальный маршрут, который будет отвечать на обычный GET :

В ваших маршрутах определите это в дополнение к ресурсу:

 Route::get('user/{site}/delete', ['as' => 'user.delete', 'uses' => 'UserController@destroy']); 

На ваш взгляд:

 <a href="{{ route('user.delete', $user->id) }}">Delete this user</a> 

В вашем контроллере:

 public function destroy(User $user) { $user->delete(); return redirect()->route('users.index'); } 

Если нам нужно использовать якорь для запуска маршрута уничтожения, и мы не хотим использовать ajax, мы можем поместить форму внутри нашей ссылки и отправить форму, используя атрибут onclick :

 <a href="javascript:void(0);" onclick="$(this).find('form').submit();" > <form action="{{ url('/resource/to/delete') }}" method="post"> <input type="hidden" name="_method" value="DELETE"> </form> </a> . <a href="javascript:void(0);" onclick="$(this).find('form').submit();" > <form action="{{ url('/resource/to/delete') }}" method="post"> <input type="hidden" name="_method" value="DELETE"> </form> </a> 

Если вы действительно хотите посетить действие destroy по удалению маршрута по HTML, существует подход к использованию HTTP Spoofing, что означает, что вы можете посетить метод удаления HTTP, добавив скрытую переменную с именем _method со значением «DELETE» . Такой же способ можно использовать для HTTP-метода «PUT» и «PATCH».

Ниже приведен пример метода DELETE.

 <form action="/tasks/5" method="POST"> <input type="hidden" name="_method" value="DELETE"> </form> 

получит маршрут

 DELETE /tasks/{id} destroy tasks.destroy 

если вы используете коллектив laravel, вы можете написать этот способ в своих представлениях.

 {!! Form::open(['url' => '/tasks/'.$cat->id, 'method' => 'delete']) !!} {!! Form::submit('Delete', ['class' => 'btn btn-primary']) !!} {!! Form::close() !!} 

удачи!

Если вы хотите использовать ссылку, вы можете использовать только что созданную библиотеку, которая позволяет людям создавать ссылки, которые ведут себя как POST, DELETE … calls.

https://github.com/Patroklo/improved-links