php - laravel action() 辅助方法中的欺骗请求方法?

标签 php laravel laravel-5 laravel-5.5 http-delete

在 Laravel 5.5 项目中,我有一个带有 destory 方法的学生 Controller 。

public function destroy(Student $student)
{
    //destroy $student and redirect
}

我的 Controller 路线如下

Route::delete('/student/{id}', 'StudentController@destroy');

现在我们来回答这个问题。

我有一个管理学生的页面,它有一个删除按钮。

  <a class="btn btn-danger"
       href="{{ action('StudentController@destroy', ['id' => $student->id]) }}" >
  Delete
  </a>

当我单击删除按钮时,它会抛出方法不允许异常,因为该请求不是删除请求。 是否有任何方法/解决方法可以通过 action()/route() 辅助函数指定/欺骗请求方法?

通常我会创建一个带有隐藏_method="delete"输入的表单并发布该表单。但如果我要添加更新按钮,那么我必须创建另一个带有隐藏 _method="patch" 的表单,我认为这不是一个好的做法。

请提供一些前进的想法。

最佳答案

回答您的问题 - 是的,您应该创建允许您删除学生的表单。这就是 REST 的使用方式 - 您无需创建解决方法,而只需对给定操作使用有效的 HTTP 方法。

还有一个原因导致您不应该为此使用链接和 GET 方法。例如,假设您删除学生的 URL 如下所示:

http://example.com/students/1/delete

当您在浏览器中输入网址时,浏览器通常会记住以前的网址,因此如果您使用 GET 方法删除学生,则可能会错误地删除某些学生。

当然,在上面的示例中,您可以使用 JavaScript,当您单击将运行有效 HTTP 操作的链接时,该 JavaScript 将启动,但这可能意味着比使用简单表单需要更多工作。

关于php - laravel action() 辅助方法中的欺骗请求方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46872794/

相关文章:

php - 我在这个数组和 foreach 上做错了什么?

php - 非浏览器发送的 HTTP 请求和 PHP session

php - 在 Symfony2 中异步调用命令

php - 在 PHP 中正确过滤 HTML 编辑器的最佳方法是什么?

php - 如何在 Laravel 中将连接结果作为对象数组获取?

php - 在 Laravel Eloquent 中,从父表中选择 "whereIn"

php - Laravel 中的分页不起作用

php - PDOException SQLSTATE [28000] [1045] 拒绝用户访问 'homestead' @'localhost'

php - Laravel 4 Fluent Query Builder 上的列名冲突

php - 如何使用 Laravel 事件发送电子邮件?