我正在使用Laravel,正在尝试创建一个编辑页面,并在提交时调用我的更新方法,问题是我在更新时得到404。这是我用于编辑的刀片文件,如下所示:
@extends('adminlte::page')
@section('title', 'AdminLTE')
@section('content_header')
<h1>Professions</h1>
@stop
@section('content')
<form method="PUT" action="/admin/professions-update/{{ $data->pkprofession }}">
<div class="form-group">
<label for="profession_name">Profession Name</label>
<input type="text" name="profession_name" id="profession_name" class="form-control" value="{{$data->profession_name}}" />
</div>
<div class="form-group">
<button type="submit" class="btn btn-success">Update</button>
</div>
</form>
@stop
这是我的路线:
Route::get('/admin/professions-edit/{id}', 'v1\ProfessionsController@edit');
Route::put('/admin/professions-update/{id}', 'v1\ProfessionsController@update');
这是被调用的方法:
public function edit($id)
{
$data = PdTprofession::find($id);
return view('professions-edit', compact('data'));
}
public function update(Request $request, $id)
{
$data = PdTprofession::find($id);
return view('professions-edit', compact('data'));
}
为什么会出现404错误,该如何解决?
谢谢
答案 0 :(得分:3)
在laravel docs中,HTML表单不支持PUT,PATCH或DELETE 动作。因此,定义PUT,PATCH或DELETE路由时 从HTML表单中,您需要将一个隐藏的_method字段添加到 形成。与_method字段一起发送的值将用作HTTP 请求方法:
<form action="/foo/bar" method="POST">
<input type="hidden" name="_method" value="PUT">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>
您可以使用@method Blade指令生成_method输入:
<form action="/foo/bar" method="POST">
@method('PUT')
@csrf
</form>
答案 1 :(得分:1)
您的代码中有太多问题,可以一一解决:
action="/admin/professions-update/{{ $data->pkprofession }}">
将其更改为:
action="{{ url('/admin/professions-update/' . $data->pkprofession) }}">
,然后HTML表单不支持PUT,PATCH或DELETE操作,因此将其更改为:
<form action="{{ url('/admin/professions-update/' . $data->pkprofession) }}" method="POST">
@method('PUT')
@csrf // this is required when you are using the method other then 'get'
other elements
</form>
答案 2 :(得分:0)
您缺少csrf
令牌和method
输入。试试这个:
@extends('adminlte::page')
@section('title', 'AdminLTE')
@section('content_header')
<h1>Professions</h1>
@stop
@section('content')
<form method="POST" action="/admin/professions-update/{{ $data->pkprofession }}">
@csrf
@method('PUT')
<div class="form-group">
<label for="profession_name">Profession Name</label>
<input type="text" name="profession_name" id="profession_name" class="form-control" value="{{$data->profession_name}}" />
</div>
<div class="form-group">
<button type="submit" class="btn btn-success">Update</button>
</div>
</form>
@stop
此外,在您的update
方法中,您忘记了更新对象,请将其添加到代码中:
$data->update($request->all());
有关更多信息:DOCS