在Laravel 4.2中,有什么方法可以创建一个url链接,以便它发送DELETE或PUT请求吗?
例如,我有一个删除按钮,我知道我可以将它放在一个表单中,并使表单向resource.destroy发送删除请求以删除所有内容。我想要的是避免在表单中包含按钮,只需创建一个到resource.destroy(我正在使用restful资源)的URL并执行该函数中的操作。我知道我可以使用action()但是它会发送一个GET请求。我可以让它发送DELETE / PUT无论其他任何请求而不将其包装在表单中吗?有可能吗?
答案 0 :(得分:1)
不,使用“普通”HTML链接发送GET请求的任何其他内容都是不可能的 您要么必须在表单中包装按钮,要么使用javascript。这是jQuery的一个简单示例:
<a id="button" href="{{ route('route.name') }}">Click me</a>
或使用laravel助手进行完整链接
{{ link_to_route('route.name', 'Click me', array(), array('id' => 'button')) }}
(实际上,只要href
属性包含正确的网址,您生成链接的方式无关紧要)
然后您可以收听click
事件,阅读href
属性并将其用于ajax请求
$('#button').on('click', function(e){
e.preventDefault(); // avoid redirect from clicking on the link
$.ajax({
url: $(this).prop('href'),
type: 'PUT'
});
});
请注意,这样用户就会停留在同一页面上。根据您想要做什么,您可能希望在ajax调用之后进行重定向
答案 1 :(得分:1)
除了@ lukasgeiter的回答,另一个选择是使用小Restfulizer.js&#34;库&#34;在一些地方漂浮在网络上。 Ryan Durham为他的Sentinel套装做了一些更新,所以这是我开始使用的那个:restfulizer.js
使用此库,您只需在链接中添加data-method
属性,并将其设置为您要使用的方法。它使用不显眼的javascript来创建具有正确输入的隐藏表单,并在单击链接时提交隐藏的表单。如果需要CSRF令牌,还可以设置data-token
属性,并设置一个&#34; action_confirm&#34;如果您想要弹出确认框(CSRF令牌和确认框是Ryan更新的一部分)。
完整使用示例:
<a href="post/1" data-method="delete" data-token="{{ csrf_token() }}" class="action_confirm">Delete Me</a>
更极端的选择是包含rails jquery-ujs库(适用于Laravel),并阅读有关如何使其工作的文档。它会提供更多的灵活性,但具有更高的设置/学习曲线。