我们可以在Laravel的链接中更改请求

时间:2014-12-23 23:52:45

标签: php laravel

在Laravel 4.2中,有什么方法可以创建一个url链接,以便它发送DELETE或PUT请求吗?

例如,我有一个删除按钮,我知道我可以将它放在一个表单中,并使表单向resource.destroy发送删除请求以删除所有内容。我想要的是避免在表单中包含按钮,只需创建一个到resource.destroy(我正在使用restful资源)的URL并执行该函数中的操作。我知道我可以使用action()但是它会发送一个GET请求。我可以让它发送DELETE / PUT无论其他任何请求而不将其包装在表单中吗?有可能吗?

2 个答案:

答案 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属性包含正确的网址,您生成链接的方式无关紧要)

jQuery事件监听器

然后您可以收听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),并阅读有关如何使其工作的文档。它会提供更多的灵活性,但具有更高的设置/学习曲线。