什么是删除记录的最佳方法:Laravel 5.2.15

时间:2016-03-18 08:14:45

标签: php laravel-5.1 laravel-5.2

我使用的是Laravel 5.2.15。

网页中有记录列表,其中包含每个记录的“编辑”和“删除”按钮。我有两种删除记录的方法

  1. 使用JQuery并将Ajax请求发送到服务器。
  2. 在每行中放置一个删除按钮的表单标记。 我有以下问题
  3.   
        
    1. 如果我使用方法1,在从Android或iPhone查看网站时是否会引起任何问题?我有另一种选择,可以使用Request类进行服务器端验证。
    2.   
    3. 如果是方法2,是否会使页面变重?我正在使用分页,因此每页将有10条记录被移位。
    4.   
    5. 如果我应该采用哪种方法,请指导我,或者如果两种方法都不正确,请指出。
    6.   

5 个答案:

答案 0 :(得分:3)

你所提出的问题并没有真正关注选择一个在另一个之上的主要原因。它们主要区别在于如何将请求发送到服务器以及如何刷新页面以显示结果。

使用Ajax是一种非常常见的方法,并且依赖于使用Javascript,这种技术已经在很长一段时间内在所有浏览器中都可用。兼容性不会成为问题,因为大多数互联网无论如何都无法运行(你甚至可以使用第二种方法作为后备机制使其工作)。您发送的请求通常是对REST endpoint的HTTP DELETE请求,以便服务器知道删除记录 1 。在从服务器接收到成功响应后,页面负责通过移除与刚删除的记录相对应的行来更新自身,并且可能获取新记录以在该页面上仍然具有10行。无需刷新页面,但需要一些Javascript。

您的第二种方法是旧式学校,因为您提交的表单包含某种标识符,以便服务器知道该怎么做。这是一个整页加载,如果你想正确地做 2 ,它应该是一个HTTP POST请求。在Post/Redirect/Get成语之后,服务器然后发送重定向响应,以便浏览器将触发另一个正常页面加载作为GET请求,以向用户显示更新的记录列表。您不必自己手动更新页面,代价是烦人的页面重新加载(在当前时间和年龄不再是这种情况)。

我的建议是采用第一种方法。这是现代的做事方式,允许非重新加载页面。但是,它确实需要在客户端(在Javascript中)进行一些额外的工作来相应地更新页面。

作为旁注,CSRF必须在两种情况下都得到妥善处理。始终在您在服务器上执行的每个“更新”操作中包含CSRF令牌。

1 当然,你必须自己编程:)

2 浏览器通常不支持除GET和POST之外的任何内容,尽管HTTP规范允许更多的请求方法。

答案 1 :(得分:1)

这取决于您的要求。但是你应该选择第一个approch。如果您将使用第二个approch,则必须刷新页面,因为您无法处理响应。所以基本上如果你删除5个项目,页面需要刷新5次,你可能不会一次发送超过1个删除请求。现在如果您使用第一个approch,因为它是ajaxjavascript,您可以根据结果显示相应的消息,而不需要不必要的页面刷新。如您所述,您可以使用Request进行验证类。因此,您可以处理恶意或恶意请求。我确信CSRF不会出现太多问题,因为您可以使用Request::ajax()检查请求是否为ajax。所以第一个approch更好,主要是因为没有页面刷新。

答案 2 :(得分:0)

两种方法都很好;)

  

但第二种方法比第一种更好;使用这种方法,您也可以防止CSRF攻击;

答案 3 :(得分:0)

我建议您使用方法1进行某些修改。

  • 使用get request删除记录。
  • 发送CSRF令牌,不要忘记加密您的记录ID
  • 将您的删除网址添加到href

然后当你执行ajax请求时,使用来自href的url,你可以发送一些额外的参数,比如is_ajax = 1,但是laravel已经检查了jquery头,所以Request::isAjax()方法会告诉你是否请求是ajax请求或正常请求。

现在您需要做的就是为ajax和普通请求发送不同的响应。

希望能帮助他们:D

答案 4 :(得分:0)

您提到的第二种方法的另一个缺点是显示验证错误。特别是来自您的编辑甚至您的删除操作。

如果每组数据都有多个表单,则显示验证错误会很麻烦。但是,如果您只是通过获取提交的行元素的引用来遵循方法2,那么如果发生了验证错误,您可以轻松附加警报div。

对于删除操作,其他人可能已经删除了一些共享数据,因此您可能还想告诉用户有人已经将其删除了。