href链接中的laravel方法?
Posted
技术标签:
【中文标题】href链接中的laravel方法?【英文标题】:laravel method in href link? 【发布时间】:2016-07-01 00:41:57 【问题描述】:我想创建一个包含两个链接的下拉菜单。 “删除”和“编辑”链接。
我为删除功能创建了一个表单。
!! 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');
但这对我没有用..
所有/show/路线:
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
【问题讨论】:
为什么不链接到使用TestController@destroythread
的路由?
@JilsonThomas 请查看我的更新 :)
你用的是哪个版本的 laravel?
我现在正在使用 Laravel 5
在你的路由中,定义这个:Route::delete('/show/id', ['as'=>'destroy', 'uses'=>'Test\\TestController@destroy']);
,在href中,使用:<li><a href=" route('destroy', $comment->id) ">Delete</a></li>
【参考方案1】:
Laravel 使用方法欺骗来执行 '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(...)。以前的方法是将表单发布到路线。此外,将整个表单包装在锚标记中是无效标记。
【讨论】:
我会更新我的问题,请在大约一分钟后查看它:) 您是否在 Route::delete(...) 之前定义了将发布到 '/show/id' 的任何路由?我只是想知道您的 routes.php 中是否有冲突 是的,我有,我会用我拥有的所有 /show 路线更新我的问题 :) 你能通过 chrome web inspector 或 fiddler 检查网络请求吗?它是显示正在发送的实际 POST (DELETE) 请求还是 GET 请求? 这是一个删除请求...在下拉菜单之前,我有一个删除按钮,它工作得很好。所以我认为它需要删除请求【参考方案2】:因此,根据 cmets 中的讨论,您必须使用 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>
【讨论】:
我应该把这个 ajax 代码放在哪里?<li><a href=" route('destroythread', $comment->id) ">Delete</a></li>
这就是我的下拉删除菜单现在的样子
对不起,我昨天遇到了一些网络问题。我现在试试这个【参考方案3】:
另一种方式,尝试'Laravel Collective' html Helper。
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'
]);
【讨论】:
好吧,但这是一个提交按钮。我知道做普通按钮的方法,但我不想在下拉菜单中包含删除部分。【参考方案4】:试试这个:
带有方法的表单不显示,您可以使用 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>
【讨论】:
以上是关于href链接中的laravel方法?的主要内容,如果未能解决你的问题,请参考以下文章