我们可以在拉拉维尔的链接中更改请求吗?


Can we change request in links in Laravel

有什么

方法可以在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上工作正常),并阅读有关如何使其工作的文档。它将提供更大的灵活性,但具有更高的设置/学习曲线。