首页 > 解决方案 > LARAVEL 8:ErrorException 未定义索引:私有

问题描述

我正在使用 Laravel 8 开发我的项目,并且我制作了这个表格,以便将一些数据添加到数据库中:

    <form class="mb-3" method="POST" action="/ask">
        @csrf
        <div class="form-group">
            <label for="topic" class="BKoodakBold">Question Title</label>
            <input name="title" type="text" class="form-control BSinaBold" id="topic" required>
        </div>
        <div class="form-group">
            <label for="topic" class="BKoodakBold">Question Body</label>
            <textarea name="body" class="form-control BSinaBold" id="comment" required></textarea>
        </div>
        <label for="topic" class="BKoodakBold">Question Category</label>
        <select class="form-control BSinaBold" name="category" id="category">
            @foreach(\App\Models\Category::all() as $category)
                <option value="{{ $category->id }}">{{ $category->name }}</option>
            @endforeach
        </select></br>
        <div class="form-check">
            <label class="form-check-label BKoodakBold">
                <input name="private" type="checkbox" class="form-check-input" id="checkbox" value="on">
                private chat
            </label>
        </div></br>
        <button type="submit" class="btn btn-primary BJadidBold">Send</button>
        <button type="reset" class="btn btn-danger BJadidBold">Reset</button>
    </form>

在控制器中,我添加了以下代码:

    public function postForm()
    {
        $validate_data = Validator::make(request()->all(),[
            'title' => 'required',
            'body' => 'required',
            'private' => 'nullable',
            'category' => 'required'
        ])->validated();

        Question::create([
            'title' => $validate_data['title'],
            'body' => $validate_data['body'],
            'private' => $validate_data['private'],
            'category' => $validate_data['category']
        ]);

        return redirect()->back();
    }

现在的问题是,如果我取消选中该private chat复选框,我会将此视为错误:

ErrorException 未定义索引:私有

但是,如果我检查它,表单将成功提交。

那么您对此有何想法,我该如何解决这个问题?

移民:

public function up()
    {
        Schema::create('questions', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->text('body');
            $table->string('category');
            $table->string('private');
            $table->timestamps();
        });
    }

标签: phplaravellaravel-8

解决方案


使用类似的东西:

 Arr::get($validate_data, 'private', 0)

或者

 $request->input('private', 0)

请注意,使用 Arr::get() 您不需要指定第三个参数,因为它默认为 false。在这种情况下,您应该使用一些具有默认值的助手。我想这也可以:

'private' => $validate_data['private'] ?? false

推荐阅读