我正在关注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.
答案 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";
}