如何使用补丁方法更新laravel 5.2用户编辑表单

时间:2016-08-12 15:17:36

标签: laravel laravel-5 laravel-5.2 laravel-5.1 laravel-routing

我正在关注jeffrey的laravel教程。但是我在更新表单时遇到了问题。我正在获取所有表单字段,但在更新时显示该页面未找到。我已经尝试过多次使用jeffrey如何在5.2中更新表单

https://laracasts.com/series/laravel-5-from-scratch

<form action="form/{{$user->id}}" method="POST">
{{method_field("PATCH")}}
        <label for="name">Name</label>
        <input type="text" name="name" value="{{$user->name}}">
        <label for="email">Email</label>
        <input type="text" name="email" value="{{$user->email}}">

        <label for=""></label>
        <input type="submit" value="Submit" name="submit">
    </form>

this is routes
Route::get("form/{id}/edit", "you@edit");
Route::patch("form/{user}", "you@update");

This is my controller 

public function edit($id)
    {
        $user = laravel::findorfail($id);
        return view("form", compact("user"));
    }

    public function update(Request $request, User $user)
    {
        $user->update($request->all());
    }

Thank you in advance.

3 个答案:

答案 0 :(得分:1)

尝试运行php artisan route:clear

您还需要使用CSRF令牌添加字段。以下是documentation

中的一个示例
<input type="hidden" name="_token" value="{{ csrf_token() }}">

答案 1 :(得分:1)

正如我所看到的,路由为form/form/{id}的问题是由于您的表单的操作路径。为避免在路径前添加/,最终路径为/form/{id}。另一种方法是使用删除路径中的form/字词并保留{id}

解释一下当您添加/时所发生的事情以及您创建绝对路径的路径的开头,但是如果您在没有/的情况下启动路径,那么您正在使用相对路径路径,这意味着路径将取决于当前的应用程序URL。

避免此类事情的最佳方法是使用命名路由。我总是试着用它们。

答案 2 :(得分:0)

最终我找到了解决方案。

路线补丁应该是:

Route::patch("form/{user}", "you@update");

但实际上应该是这样的:

Route::patch("form/form/{id}", "you@update");

,更新控制器应该像:

public function update(Request $request, $id)
{
    $user = laravel::find($id);
    $user->update($request->all());
    return "sucess";
}