Laravel-编辑和更新页面

时间:2019-02-06 14:10:54

标签: php laravel

我正在使用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错误,该如何解决?

谢谢

3 个答案:

答案 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