我目前在 Laravel 应用程序中遇到表单提交问题,但无法解决。尽管遵循 Laravel 中表单创建和处理的标准实践,但表单提交并未按预期工作。当我单击“提交”按钮时,前端没有任何反应(没有控制台错误或消息),但浏览器开发人员工具中的“网络”选项卡显示 POST 请求的 302 状态。我正在寻求帮助以了解可能出现的问题。
这是我的代码
<form method="POST" action="{{ route('tasks.store') }}">
@csrf
<div>
<label for="title">
Title
</label>
<input type="text" name="title" id="title"/>
</div>
<div>
<label for="description">Description</label>
<textarea name="description" id="description" rows="5"></textarea>
</div>
<div>
<label for="long_description">Long description</label>
<textarea name="long_description" id="long_description" rows="10"></textarea>
</div>
<div>
<button type="submit">Ad task</button>
</div>
</form>
and routes
<?php
use App\Models\Task;
use Illuminate\http\Request;
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return redirect()->route('tasks.index');
});
Route::get('/tasks', function () {
return view('index', [
'tasks' => Task::latest()->get()
]);
})->name('tasks.index');
Route::view('/tasks/create', 'create')
->name('tasks.create');
Route::get('/tasks/{id}', function ($id) {
return view('show', [
'task' => Task::findOrFail($id)]);
})->name('tasks.show');
Route::post('/tasks', function (Request $request) {
$data = $request->validate([
'title' => 'required|max:255',
'description' => 'required',
'long_description' => 'required'
]);
$task = new Task;
$task->title = $data['title'];
$task->description = $data['description'];
$task->long_description = $data['long_description'];
$task->save();
return redirect()->route('tasks.show', ['id' => $task->id]);
})->name('tasks.store');
我希望表单能够正常工作并在提交后重定向到正确的路线
表单行为:提交表单后,浏览器控制台中没有可见的响应或错误消息。 网络响应:“网络”选项卡指示 POST 请求的 302 Found 状态代码。 预期结果:我预计表单会提交数据,然后在提交成功后重定向到指定的路线。
我自己测试了代码,我惊讶地发现在验证之前记录 $request->all() 是一个空数组,这使得验证失败。我通过使用请求助手 (request()) 使其工作。 代码是:
Route::post('/tasks', function () {
$data = request()->validate([
'title' => 'required|max:255',
'description' => 'required',
'long_description' => 'required'
]);
$task = new Task;
$task->title = $data['title'];
$task->description = $data['description'];
$task->long_description = $data['long_description'];
$task->save();
return redirect()->route('tasks.show', ['id' => $task->id]);
})->name('tasks.store');