在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);
}
}
的表单,我不认为这是一个好习惯。
请提出一些建议。
答案 0 :(得分:2)
回答你的问题 - 是的,你应该创建一个允许你删除学生的表格。这就是REST的使用方法 - 您不会创建变通方法,但只需使用有效的HTTP方法进行给定操作。
还有另一个原因,你不应该为此使用链接和GET方法。例如,假设您删除学生的URL如下所示:
http://example.com/students/1/delete
当您在浏览器中输入网址时,浏览器通常会记住以前的网址,因此如果您使用GET方法移除学生,则可能会误删某些学生。
当然,在上面的示例中,您可以使用在单击将运行有效HTTP操作的链接时启动的JavaScript,但这可能意味着比使用简单表单更多的工作。
答案 1 :(得分:1)
我可以通过两种方式来考虑它:
使用方法DELETE
创建表单{!! Form::model($student, ['method' => 'DELETE', 'action' => ['StudentController@destroy', $student->id]]) !!}
{!! Form::submit('Delete', ['class' => 'btn btn-danger']) !!}
{!! Form::close() !!}
使用请求类型DELETE
创建ajax请求$.ajax({
url: '/students/'+id+'/delete,
type: "DELETE",
data:{ _token: "{{ csrf_token() }}" }
});