Laravel action() 帮助程序方法中的欺骗请求方法



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

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

我有控制器的路由如下

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

现在让我们进入问题。

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

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

当我单击删除按钮时,它会抛出method not allowed exception因为该请求不是删除请求。有什么方法/解决方法可以通过action()/route()帮助程序函数指定/欺骗请求方法?

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

请给出一些想法。

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

还有一个

原因,为什么你不应该为此使用链接和GET方法。例如,假设您要删除学生的 URL 如下所示:

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

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

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

我能想到两种方法:

  1. 使用方法 DELETE 创建表单

    {!! Form::model($student, ['method' => 'DELETE', 'action' => ['StudentController@destroy', $student->id]]) !!}
        {!! Form::submit('Delete', ['class' => 'btn btn-danger']) !!}
    {!! Form::close() !!}
    
  2. 创建请求类型为 DELETE 的 ajax 请求

    $.ajax({
       url: '/students/'+id+'/delete,
       type: "DELETE",
       data:{ _token: "{{ csrf_token() }}" }
    });
    

最新更新