方法可以在Laravel 4.2中创建一个URL链接,以便它发送DELETE或PUT请求?
例如,我有一个删除按钮,我知道我可以把它放在一个表单中,并使表单向 resource.destroy 发送删除请求以删除某些内容等等。我想要的是避免将按钮包装在表单中,而只需创建一个转到 resource.destroy 的 url(我正在使用 restful 资源)并执行该函数中的内容。我知道我可以使用action(),但这会发送一个GET请求。我可以让它发送 DELETE/PUT 任何其他请求而不将其包装在表单中吗?可能吗?
不,不可能使用"普通"HTML 链接发送 GET 请求的任何其他内容.
您要么必须将按钮包装在表单中,要么使用 javascript。下面是一个jQuery的简单示例:
包含已生成网址的链接
<a id="button" href="{{ route('route.name') }}">Click me</a>
或使用拉拉维尔助手获取完整链接
{{ link_to_route('route.name', 'Click me', array(), array('id' => 'button')) }}
(实际上,只要href
属性包含正确的网址,如何生成链接并不重要)
j查询事件侦听器
然后你可以监听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 调用后执行重定向
除了@lukasgeiter的答案之外,另一种选择是使用小的Restfulizer.js"库"在几个地方漂浮在网络上。Ryan Durham 为他的 Sentinel 软件包做了一些更新,所以我要从这个开始:restfulizer.js
使用此库,只需向链接添加一个 data-method
属性,并将其设置为要使用的方法。 它使用不显眼的javascript创建具有正确输入的隐藏表单,并在单击链接时提交隐藏表单。 如果需要 CSRF 令牌,还可以设置data-token
属性,如果要弹出确认框,也可以设置"action_confirm"类(CSRF 令牌和确认框是 Ryan 更新的一部分)。
完整使用示例:
<a href="post/1" data-method="delete" data-token="{{ csrf_token() }}" class="action_confirm">Delete Me</a>
一个更极端的选择是包含rails jquery-ujs库(在Laravel上工作正常),并阅读有关如何使其工作的文档。它将提供更大的灵活性,但具有更高的设置/学习曲线。