2016-08-12 49 views
2

我正在关注由jeffrey编写的laravel教程。但我在更新表单时遇到问题。我收到所有表单字段,但更新时显示该页面未找到。我已经尝试了许多多什么杰弗里告知如何更新形式在5.2如何使用补丁方法更新laravel 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", "[email protected]"); 
Route::patch("form/{user}", "[email protected]"); 

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. 
+0

如果你正在使用'/ form',并且你试图将表单提交给'/ form/{id}',我认为你的动作应该是'/ form/{{$ user-> id}}' 。否则,它实际上是提交给'/ form/form/{id}'。 – user3158900

回答

1

尝试运行php artisan route:clear

您还需要添加具有CSRF令牌的字段。下面是documentation的一个示例:

<input type="hidden" name="_token" value="{{ csrf_token() }}"> 
+0

我加了,但同样的错误显示给我。 – whoami

+0

'你@更新'中的'你'是什么?它应该是那里的控制器名称。如果你运行'php artisan route:list',你会在列表中看到这条路线吗?如果你没有看到它,试着运行'php artisan route:clear',然后再运行'php artisan route:list'。 –

+0

您只是我的控制器名称。简单的我以你的名字命名 – whoami

0

最终我找到了解决方案。

的路由补丁应该是:

Route::patch("form/{user}", "[email protected]"); 

,但实际上它应该是这样的:

Route::patch("form/form/{id}", "[email protected]"); 

和更新控制应该是这样的:

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

当我看到这,路线问题为form/form/{id}是因为您的表单行为路由。为避免这种情况,在路径前添加/,那么最终路径将为/form/{id}。另一种方式,你可以得到这只是使用删除form/单词从你的路径,只保留{id}

解释一下当你添加/和你创建绝对路径的路由的开始时发生了什么,但是如果你在没有/的情况下启动路径,那么你使用的是相对路径,这意味着路径将取决于当前的应用程序的网址。

避免这种事情的最好方法是使用命名路线。我总是尝试使用它们。