href链接中的laravel方法?

时间:2016-03-15 14:06:32

标签: php laravel drop-down-menu

我想创建一个包含两个链接的下拉列表。 “删除”和“修改”链接。

对于删除功能,我创建了一个表单。

                        {!! 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'方法,它将无效。我希望你们都能理解我想说的话......无论如何,我的英语不是最好的。

有人可以帮我这个吗?

感谢您的帮助!

我之前尝试过这样做,但这也没有奏效:

<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');

但这对我没用..

all / show / routes:

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 

4 个答案:

答案 0 :(得分:0)

Laravel使用方法欺骗来实现“删除”,“删除”,“补丁”和“补丁”。形式要求。就像@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(...)。之前的方法是将表单发布到路径。此外,将整个表单包装在锚标记中是无效的标记。

答案 1 :(得分:0)

因此,根据评论中的讨论,您必须使用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>

答案 2 :(得分:0)

替代方式,尝试&#39; Laravel Collective&#39; Html助手。

<强> 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'
]);

答案 3 :(得分:0)

试试这个:

带有方法的表单不显示,您可以使用 POST/PUT/DELETE 方法调用路由/url ...

<a href="{{ route('logout') }}" class="dropdown-item" onclick="event.preventDefault(); document.getElementById('logout-form').submit();">Logout</a>
                  
<form id="logout-form" action="{{ route('item/delete',) }}" method="POST" style="display: none;">
    @csrf
</form>