Я хочу создать выпадающий список с двумя ссылками. «Удалить» и ссылку «Изменить».
Для функции delete я создал форму.
{!! Former::horizontal_open()->method('DELETE')->action(action("Test\\TestController@destroythread", $comment->id)) !!} {!! Former::danger_submit('Delete') !!} {!! Former::close() !!}
Форма работает, это означает, что мой комментарий будет удален, если я нажму кнопку.
Нет. Я решил удалить кнопку удаления и создать раскрывающийся список со ссылкой на удаление. Поэтому мне нужно получить логику этой формы в моем выпадающем меню.
Но я не получил это в раскрывающемся списке. Оптическая кнопка «Удалить» – это часть раскрывающегося списка:
<li><a href="#"> Delete </a></li>
Но я не могу просто поместить свою функцию контроллера в эту «href-link», потому что без «DELETE-Method» это не сработает. Надеюсь, вы все понимаете, что я пытаюсь сказать … мой английский не самый лучший.
Может ли кто-нибудь помочь мне с этим?
Спасибо за любую помощь!
Я пробовал это так, но это не сработало:
<li> <a> {!! Former::horizontal_open()->method('DELETE')->action(action("Test\\TestController@destroythread", $comment->id)) !!} Delete {!! Former::close() !!} </a> </li>
моя попытка привязки непосредственно к маршруту:
<li><a href="{{ route('destroy', $comment->id) }}">Delete</a></li>
и мой маршрут выглядит следующим образом:
Route::delete('/show/{id}', 'Test\\TestController@destroythread')->name('destroythread');
но это не сработало для меня ..
все / показать / маршруты:
Route::get('/show/{id}', 'Test\\TestController@show'); Route::put('/show/{id}/edit', ['as' => 'editing', 'uses' => 'Test\\TestController@update']); Route::get('/show/{id}/edit', 'Test\\TestController@edit')->name('edit'); Route::delete('/show/{id}', 'Test\\TestController@destroy')->name('destroy'); Route::delete('/show/{id}', 'Test\\TestController@destroythread')->name('destroythread'); // this is the route we are talking about
Laravel использует метод spoofing для выполнения запросов «DELETE», «PUT», «PATCH». Как упоминал @Jilson Thomas, вы можете просто создать ссылку непосредственно на маршрут. Я подозреваю, что вы используете находчивые маршруты, поэтому вы пытаетесь отправить запрос DELETE?
Взгляните на этот раздел в документах маршрутизации, это может помочь вам: https://laravel.com/docs/master/controllers#restful-supplementing-resource-controllers
Основываясь на ваших маршрутах, я считаю, что следующие два маршрута совпадают, прежде чем они доберутся до нужного вам маршрута.
Route::put('/show/{id}/edit', ['as' => 'editing', 'uses' => 'Test\\TestController@update']); Route::delete('/show/{id}', 'Test\\TestController@destroy')->name('destroy');
Попробуйте переместить нужный маршрут над ними и посмотреть, что произойдет.
редактировать
<li><a href="{{ route('destroy', $comment->id) }}">Delete</a></li>
Это создаст запрос GET, поэтому он не будет соответствовать Route :: delete (…). Предыдущий метод отправлял форму на маршрут. Кроме того, обертка всей формы в теге привязки является недопустимой разметкой.
Итак, согласно обсуждению в комментариях, вам нужно будет использовать запрос ajax для запроса на delete
из тега привязки.
$.ajax({ url: '/show/'+$('#testId').attr('value'), type: 'DELETE', success: function(data){ if(data.success) alert('Deleted'); }, error: function() {} });
и на вашем маршруте:
Route::delete('/show/{id}', ['as'=>'destroy', 'uses'=>'Test\\TestController@destroy']);
HTML
<li><a href="#" id="testId" value="{{$comment->id}}">Delete</a></li>
Альтернативный способ, попробуйте «Помощник Habler Laravel Collective ».
HTML
{!! Form::open('delete', 'method' => 'delete, 'route' => ['show.destroy', $comment->id] ) !!} {!! Form::submit('Submit') !!} {!! Form::close() !!}
routes.php
Route::delete('show/{show}', [ 'uses' => 'TestController@destroy', 'as' => 'show.destroy' ]);