programing

Larabel IN 검증 또는 ENUM 값에 의한 검증

copysource 2022. 9. 15. 23:31
반응형

Larabel IN 검증 또는 ENUM 값에 의한 검증

라라벨에서 시작할 거야검색했지만 일부 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'
]);

가능합니까?

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

허용되는 답변은 정상이지만 기존 상수 또는 값 배열을 사용하도록 규칙을 설정하는 방법을 추가하고 싶습니다.

다음과 같은 경우:

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)

라라벨 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+

매뉴얼에 나타나 있듯이 규칙 클래스를 사용할 수 있습니다.예를 들어 마이그레이션에서 다음과 같은 정의를 사용하는 경우:

$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에서 정상적으로 동작하고 있습니다.

Larabel 9 php8.1

$request->validate([
    'type' => [new Enum(TypeEnum::class)],
]);

php 8 이하

enum을 소유할 수 있습니다.

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';
}

검증에서는, 2개의 다른 방법으로 사용할 수 있습니다.

첫번째

$request->validate([
        'type' => 'in:' . new TypeEnum(),
    ]);

둘째

use Illuminate\Validation\Rule;

    $request->validate([
                'type' => Rule::in(TypeEnum::toArray())
            ]);

라라벨

//migration
    $table->enum('type',[true, false])->default(true);

//controller
    $request->validate([
       'type' => ['required','in:true,false']
    ]);

언급URL : https://stackoverflow.com/questions/28976658/laravel-in-validation-or-validation-by-enum-values

반응형