当然是noobie Laravel 问题:未定义的id?为什么?
Surely noobie Laravel Question: Undefined id? Why?
我正在尝试编辑保存在我的数据库中的数据,但我完全迷路了。
在我的 PostController 中,索引、创建、存储和显示工作正常,但在编辑和更新中我失败了很多。
错误文本
Undefined variable: id (View: C:\laragon\www\larablog\resources\views\dashboard\post\edit.blade.php)
PostController.php (app\Http\Controllers\dashboard\PostController.php)
public function edit($id)
{
$post = Post::findOrFail($id);
return view ('dashboard.post.edit', ["post" => $post]);
}
public function update(Request $request, $id)
{
$post = Post::findOrFail($id);
$post::update($request->validated());
return back() -> with('status', '¡Post editado con éxito!');
}
edit.blade.php (resources\views\dashboard\post\edit.blade.php)
@extends('dashboard.master')
@section('content')
@include('dashboard.partials.validation-error')
<form action="{{ route("post.update", $post->$id) }}" method="PUT">
@csrf
<div class="form-group">
<label for="title">Título</label>
<input class="form-control" type="text" name="title" id="title" value="{{ old('title', $post->title) }}">
@error('title')
<small class="text-danger">
{{ $message }}
</small>
@enderror
</div>
<div class="form-group">
<label for="url_clean">Url limpia</label>
<input class="form-control" type="text" name="url_clean" id="url_clean" value="{{ old('content', $post->url_clean) }}">
</div>
<div class="form-group">
<label for="content">Contenido</label>
<textarea class="form-control" type="text" name="content" id="content" rows="3"> {{ old('content', $post->content) }} </textarea>
</div>
<input type="submit" class="btn btn-primary" value="Enviar">
</form>
@endsection
我不知道为什么这个错误,我需要一点理论来理解这个。
谢谢大家!
P.D。我知道是否在 PostController 中输入:
public function edit(Post $post)
public function update($Request $request, Post $post)
我不能避免写:
$post = Post::findOrFail($id);
但我想在 laravel 的第一步中这样写,而期货 id 不叫“id”
正如评论所指出的,当您从 $post 传递参数时,您必须执行类似这样的操作
<form action="{{ route("post.update", $post->id) }}" method="POST">
@csrf
@method(“PUT”)
因为您没有 id 变量。除此之外,我强烈建议使用路由模型绑定,您可以在其中传递整个模型而不是 id,因为它更简洁而且您不必在每个方法中调用 findOrFail。并且在更新时也使用
$post->update($request->validated());
因为这是调用更新方法的正确方法,所以当您有 Post 模型而不是变量时使用 ::update。
我正在尝试编辑保存在我的数据库中的数据,但我完全迷路了。
在我的 PostController 中,索引、创建、存储和显示工作正常,但在编辑和更新中我失败了很多。
错误文本
Undefined variable: id (View: C:\laragon\www\larablog\resources\views\dashboard\post\edit.blade.php)
PostController.php (app\Http\Controllers\dashboard\PostController.php)
public function edit($id)
{
$post = Post::findOrFail($id);
return view ('dashboard.post.edit', ["post" => $post]);
}
public function update(Request $request, $id)
{
$post = Post::findOrFail($id);
$post::update($request->validated());
return back() -> with('status', '¡Post editado con éxito!');
}
edit.blade.php (resources\views\dashboard\post\edit.blade.php)
@extends('dashboard.master')
@section('content')
@include('dashboard.partials.validation-error')
<form action="{{ route("post.update", $post->$id) }}" method="PUT">
@csrf
<div class="form-group">
<label for="title">Título</label>
<input class="form-control" type="text" name="title" id="title" value="{{ old('title', $post->title) }}">
@error('title')
<small class="text-danger">
{{ $message }}
</small>
@enderror
</div>
<div class="form-group">
<label for="url_clean">Url limpia</label>
<input class="form-control" type="text" name="url_clean" id="url_clean" value="{{ old('content', $post->url_clean) }}">
</div>
<div class="form-group">
<label for="content">Contenido</label>
<textarea class="form-control" type="text" name="content" id="content" rows="3"> {{ old('content', $post->content) }} </textarea>
</div>
<input type="submit" class="btn btn-primary" value="Enviar">
</form>
@endsection
我不知道为什么这个错误,我需要一点理论来理解这个。
谢谢大家!
P.D。我知道是否在 PostController 中输入:
public function edit(Post $post)
public function update($Request $request, Post $post)
我不能避免写:
$post = Post::findOrFail($id);
但我想在 laravel 的第一步中这样写,而期货 id 不叫“id”
正如评论所指出的,当您从 $post 传递参数时,您必须执行类似这样的操作
<form action="{{ route("post.update", $post->id) }}" method="POST">
@csrf
@method(“PUT”)
因为您没有 id 变量。除此之外,我强烈建议使用路由模型绑定,您可以在其中传递整个模型而不是 id,因为它更简洁而且您不必在每个方法中调用 findOrFail。并且在更新时也使用
$post->update($request->validated());
因为这是调用更新方法的正确方法,所以当您有 Post 模型而不是变量时使用 ::update。