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

时间:2017-10-22 10:02:37

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

在Laravel 5.5项目中,我有一个带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"输入的表单并发布表单。但如果我要添加更新按钮,那么我将不得不创建另一个隐藏 byte x = 0x18; for (OpCode opCode : OpCode.values()) { if (x == opCode.getValue()) { System.out.println(opCode); } } 的表单,我不认为这是一个好习惯。

请提出一些建议。

2 个答案:

答案 0 :(得分:2)

回答你的问题 - 是的,你应该创建一个允许你删除学生的表格。这就是REST的使用方法 - 您不会创建变通方法,但只需使用有效的HTTP方法进行给定操作。

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

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

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

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

答案 1 :(得分:1)

我可以通过两种方式来考虑它:

  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() }}" }
    });