laravel - 在 Laravel 中更新表单出错
问题描述
这可能是一个非常简单的问题,但我想不通!这令人沮丧。我尽我所能一步一步地解释一切。
- 这是 Laravel 8 中的一个小型 Todo 列表项目
- 用户可以创建项目。
- 当用户单击创建的项目时,他会转到项目页面(显示页面)
显示控制器.php
public function show(Project $project)
{
return view('projects.show', compact('project'));
}
- 在显示页面中,用户可以通过 textarea 表单字段添加评论。
show.blade.php
<form action="{{ route('project.update',['project' => $project]) }}" method="post">
@csrf
@method('PUT')
<textarea name="notes" placeholder="Add notes">{{ $project->notes ?? '' }}</textarea>
<button type="submit">Save</button>
</form>
- 通过更新项目,出错的地方就在这里!只要用户在评论字段中输入内容并单击保存,表单就会指示需要以下项目:
- owner_id、title、description 字段是必需的。而模型被发送到显示刀片页面,然后在表单动作路由中。我在这里做错了什么?
更新控制器.php
public function update(ProjectRequest $request, Project $project)
{
$validated = $request->validated();
$project->update($validated);
return redirect($project->path());
}
项目请求.php
public function rules(): array
{
return [
'owner_id' => 'required',
'title' => 'required',
'description' => 'required',
'notes' => 'nullable',
];
网页.php
use App\Http\Controllers\Projects\CreateController;
use App\Http\Controllers\Projects\IndexController;
use App\Http\Controllers\Projects\ShowController;
use App\Http\Controllers\Projects\StoreController;
use App\Http\Controllers\Projects\UpdateController;
use Illuminate\Support\Facades\Route;
Route::get('/', [IndexController::class, 'index'])->name('project.index');
Route::get('/projects/create', [CreateController::class, 'create'])->name('project.create');
Route::post('/projects', [StoreController::class, 'store'])->name('project.store');
Route::get('/projects/{project}', [ShowController::class, 'show'])->name('project.show');
Route::put('/projects/{project}', [UpdateController::class, 'update'])->name('project.update');
移民
public function up()
{
Schema::create('projects', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('owner_id');
$table->string('title');
$table->text('description');
$table->text('notes')->nullable();
$table->timestamps();
$table->foreign('owner_id')
->references('id')
->on('users')
->onDelete('cascade');
});
}
解决方案
如果这些字段不是必需的,则将它们从您的 $required 数组中取出,它应该可以工作。