Laravel IN 验证或按 ENUM 值进行验证

2022-08-30 08:48:21

我在拉拉维尔发起。我搜索了一下,但没有找到如何使用一些ENUM值验证数据。在下面的代码中,我需要它必须是 just or .一个或另一个:typeDEFAULTSOCIAL

$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'
]);

可能吗?


答案 1

in:DEFAULT,SOCIAL
验证下的字段必须包含在给定的值列表中。

not_in:DEFAULT,SOCIAL
正在验证的字段不得包含在给定的值列表中。

$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'
]);

答案 2

接受的答案是可以的,但我想添加如何将 in 规则设置为使用现有常量或值数组

因此,如果您有:

class MyClass {
  const DEFAULT = 'default';
  const SOCIAL = 'social';
  const WHATEVER = 'whatever';
  ...

您可以使用 的方法制定验证规则:Illuminate\Validation\Rulein

'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)

推荐