Laravel IN 验证或通过 ENUM 值验证
Laravel IN Validation or Validation by ENUM Values
我在 Laravel 开始。
我搜索但没有找到如何使用某些 ENUM 值验证数据。在下面的代码中,我需要 type
必须只是 DEFAULT
或 SOCIAL
。一个或另一个:
$validator = Validator::make(Input::only(['username', 'password', 'type']), [
'type' => '', // DEFAULT or SOCIAL values
'username' => 'required|min:6|max:255',
'password' => 'required|min:6|max:255'
]);
可以吗?
in:默认,社交
验证中的字段必须包含在给定的值列表中。
not_in:默认,社交
正在验证的字段不得包含在给定的值列表中。
$validator = Validator::make(Input::only(['username', 'password', 'type']), [
'type' => 'in:DEFAULT,SOCIAL', // DEFAULT or SOCIAL values
'username' => 'required|min:6|max:255',
'password' => 'required|min:6|max:255'
]);
已接受的答案没问题,但我想添加 如何设置 in
规则以使用现有常量或值数组。
所以,如果您有:
class MyClass {
const DEFAULT = 'default';
const SOCIAL = 'social';
const WHATEVER = 'whatever';
...
您可以使用Illuminate\Validation\Rule
的in
方法制定验证规则:
'type' => Rule::in([MyClass::DEFAULT, MyClass::SOCIAL, MyClass::WHATEVER])
或者,如果您已经将这些值分组到一个数组中,您可以执行以下操作:
class MyClass {
const DEFAULT = 'default';
const SOCIAL = 'social';
const WHATEVER = 'whatever';
public static $types = [self::DEFAULT, self::SOCIAL, self::WHATEVER];
然后把规则写成:
'type' => Rule::in(MyClass::$types)
您可以使用规则 class,如documentation所示。
例如,在迁移中具有以下定义:
$table->enum('letter',['a','b','c']);
现在您的 FormRequest 规则应该是:
class CheckInRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'letter'=>[
'required',
Rule::in(['a', 'b','c']),
],
];
}
}
其中 Rule::in (['a', 'b', 'c'])
,必须包含您的字段类型“enun”的值
我在 Laravel 8.x
上工作正常
Laravel 9+
https://laravel.com/docs/9.x/validation#rule-enum
use App\Enums\ServerStatus;
use Illuminate\Validation\Rules\Enum;
$request->validate([
'status' => [new Enum(ServerStatus::class)],
]);
枚举:
namespace App\Enums;
enum ServerStatus: string {
case ACTIVE = 'active';
case INACTIVE = 'inactive';
}
要求 PHP 8.1+
Laravel 9 php8.1
$request->validate([
'type' => [new Enum(TypeEnum::class)],
]);
小于或等于 php 8
您可以拥有枚举
class BaseEnum
{
/**
* Returns class constant values
* @return array
*/
public static function toArray(): array
{
$class = new \ReflectionClass(static::class);
return array_values($class->getConstants());
}
/**
* @return string
*/
public function __toString(): string
{
return implode(',', static::toArray());
}
}
子枚举
class TypeEnum extends BaseEnum
{
public const DEFAULT = 'default';
public const SOCIAL = 'social';
}
在验证中你可以用两种不同的方式使用它
先
$request->validate([
'type' => 'in:' . new TypeEnum(),
]);
秒
use Illuminate\Validation\Rule;
$request->validate([
'type' => Rule::in(TypeEnum::toArray())
]);
我在 Laravel 开始。
我搜索但没有找到如何使用某些 ENUM 值验证数据。在下面的代码中,我需要 type
必须只是 DEFAULT
或 SOCIAL
。一个或另一个:
$validator = Validator::make(Input::only(['username', 'password', 'type']), [
'type' => '', // DEFAULT or SOCIAL values
'username' => 'required|min:6|max:255',
'password' => 'required|min:6|max:255'
]);
可以吗?
in:默认,社交
验证中的字段必须包含在给定的值列表中。
not_in:默认,社交
正在验证的字段不得包含在给定的值列表中。
$validator = Validator::make(Input::only(['username', 'password', 'type']), [
'type' => 'in:DEFAULT,SOCIAL', // DEFAULT or SOCIAL values
'username' => 'required|min:6|max:255',
'password' => 'required|min:6|max:255'
]);
已接受的答案没问题,但我想添加 如何设置 in
规则以使用现有常量或值数组。
所以,如果您有:
class MyClass {
const DEFAULT = 'default';
const SOCIAL = 'social';
const WHATEVER = 'whatever';
...
您可以使用Illuminate\Validation\Rule
的in
方法制定验证规则:
'type' => Rule::in([MyClass::DEFAULT, MyClass::SOCIAL, MyClass::WHATEVER])
或者,如果您已经将这些值分组到一个数组中,您可以执行以下操作:
class MyClass {
const DEFAULT = 'default';
const SOCIAL = 'social';
const WHATEVER = 'whatever';
public static $types = [self::DEFAULT, self::SOCIAL, self::WHATEVER];
然后把规则写成:
'type' => Rule::in(MyClass::$types)
您可以使用规则 class,如documentation所示。 例如,在迁移中具有以下定义:
$table->enum('letter',['a','b','c']);
现在您的 FormRequest 规则应该是:
class CheckInRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'letter'=>[
'required',
Rule::in(['a', 'b','c']),
],
];
}
}
其中 Rule::in (['a', 'b', 'c'])
,必须包含您的字段类型“enun”的值
我在 Laravel 8.x
上工作正常Laravel 9+
https://laravel.com/docs/9.x/validation#rule-enum
use App\Enums\ServerStatus;
use Illuminate\Validation\Rules\Enum;
$request->validate([
'status' => [new Enum(ServerStatus::class)],
]);
枚举:
namespace App\Enums;
enum ServerStatus: string {
case ACTIVE = 'active';
case INACTIVE = 'inactive';
}
要求 PHP 8.1+
Laravel 9 php8.1
$request->validate([
'type' => [new Enum(TypeEnum::class)],
]);
小于或等于 php 8
您可以拥有枚举
class BaseEnum
{
/**
* Returns class constant values
* @return array
*/
public static function toArray(): array
{
$class = new \ReflectionClass(static::class);
return array_values($class->getConstants());
}
/**
* @return string
*/
public function __toString(): string
{
return implode(',', static::toArray());
}
}
子枚举
class TypeEnum extends BaseEnum
{
public const DEFAULT = 'default';
public const SOCIAL = 'social';
}
在验证中你可以用两种不同的方式使用它
先
$request->validate([
'type' => 'in:' . new TypeEnum(),
]);
秒
use Illuminate\Validation\Rule;
$request->validate([
'type' => Rule::in(TypeEnum::toArray())
]);