什么原因导致 POST 方法出现 302 状态?

问题描述 投票:0回答:1

我目前在 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 状态代码。 预期结果:我预计表单会提交数据,然后在提交成功后重定向到指定的路线。

laravel forms post
1个回答
0
投票

我自己测试了代码,我惊讶地发现在验证之前记录 $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');
© www.soinside.com 2019 - 2024. All rights reserved.