Laravel布尔验证严格吗

wen PHP项目 2

本文目录导读:

Laravel布尔验证严格吗

  1. 默认行为(不严格)
  2. 如何实现严格验证
  3. 实际场景建议

在 Laravel 中,布尔验证(boolean validation)默认不严格,但可以通过一些配置或自定义验证实现严格检查。

默认行为(不严格)

Laravel 的 boolean 验证规则接受的值为:

  • 真实值:true"true""1"1"on""yes"
  • 虚假值:false"false""0"0"off""no"
// 这些都是有效的布尔值验证
$request->validate([
    'active' => 'boolean',
]);

如何实现严格验证

自定义验证规则

use Illuminate\Support\Facades\Validator;
Validator::extend('strict_boolean', function ($attribute, $value, $parameters, $validator) {
    return is_bool($value);
});
// 使用
$request->validate([
    'active' => 'strict_boolean',
]);

使用正则表达式

$request->validate([
    'active' => ['required', 'regex:/^(true|false)$/i'],
]);

创建自定义表单请求

namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StrictBooleanRequest extends FormRequest
{
    public function rules()
    {
        return [
            'active' => ['required', function ($attribute, $value, $fail) {
                if (!is_bool($value)) {
                    $fail($attribute.' 必须是严格的布尔值。');
                }
            }],
        ];
    }
}

使用 Laravel 的 accepted 规则

// 只接受 true, "true", 1, "1", "yes", "on"
$request->validate([
    'agreement' => 'accepted',
]);

实际场景建议

  1. 网页表单:默认不严格通常足够,因为表单提交的值通常是字符串
  2. API 接口:建议严格验证,确保数据类型正确
  3. 内部系统:根据具体需求选择
// 推荐的做法:结合转换和验证
$request->validate([
    'active' => 'boolean',
]);
// 然后强制转换为布尔值
$data = $request->boolean('active'); // 返回 true 或 false

Laravel 的布尔验证默认不严格,但可以通过自定义规则轻松实现严格验证,根据你的业务场景选择合适的验证方式。

抱歉,评论功能暂时关闭!