php - 从 Laravel 表单中的复选框传递 bool 值

标签 php laravel

我试图在创建新帖子时保存 bool 值,然后在更新帖子时更新该值。当我创建一个新的 Post 并保存时,它会保留在数据库中,我什至可以毫无问题地更新它。我只是在处理复选框 bool 值时遇到了一些麻烦。这是我在 Laravel 中的第一个项目,我确定这是我的障碍的一部分。

架构

...
public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');
            $table->unsignedBigInteger('user_id');
            $table->string('title');
            $table->text('body')->nullable();
            $table->string('photo')->nullable();
            $table->boolean('is_featured')->nullable()->default(false);
            $table->boolean('is_place')->nullable()->default(false);
            $table->string('tag')->nullable()->default(false);
            $table->timestamps();
        });

        Schema::table('posts', function (Blueprint $table) {
            $table->foreign('user_id')->references('id')->on('users');
        });
    }
...

PostController.php
...
public function store(Request $request)
    {
        $rules = [
            'title' => ['required', 'min:3'],
            'body' => ['required', 'min:5']
        ];
        $request->validate($rules);
        $user_id = Auth::id();
        $post = new Post();
        $post->user_id = $user_id;
        $post->is_featured = request('is_featured');
        $post->title = request('title');
        $post->body = request('body');
        $post->save();

        $posts = Post::all();
        return view('backend.auth.post.index', compact('posts'));
    }
...

post/create.blade.php
...
<input type="checkbox" name="is_featured" class="switch-input"
       value="{{old('is_featured')}}">
...

最佳答案

您不是很清楚问题到底是什么,但您可以 cast the attribute作为模型中的 bool 值。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $casts = [
        'is_featured' => 'boolean',
        'is_place' => 'boolean',
    ];
}

然后在您的表单中,您需要检查该值以确定是否选中了该框。
<input type="checkbox" name="is_featured" class="switch-input" value="1" {{ old('is_featured') ? 'checked="checked"' : '' }}/>

在您的 Controller 中,您只需检查输入是否已提交。根本不会提交未经检查的输入。
$post->is_featured = $request->has('is_featured');

关于php - 从 Laravel 表单中的复选框传递 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55997601/

相关文章:

php - 拉拉维尔 5.5 : Get all registered routes in Service provider

php - Laravel 5 身份验证文件重复

php - 如何对相似的新闻进行分组

php - 如何在 PHP 中重写 URL?

php - 使用 Laravel Octane Route 返回 View

laravel - 如何使用任何图像上传验证修复 'The file failed to upload.' 错误 - Laravel 5.7

javascript laravel - 选中复选框时调用函数

PHP Laravel : How to logout from other device with same userId forcefully

php - 如何将 STDOUT 重定向到 PHP 中的文件?

php - 如何在发帖表单中实现隐藏字段,以免用户不小心重复发帖? (PHP/MySQL)