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\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)
라라벨 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
'programing' 카테고리의 다른 글
키스토어 유형: 사용할 키스토어 유형 (0) | 2022.09.15 |
---|---|
MATCH ANDING과 LIKE 중 어떤 SQL 쿼리가 더 좋습니까? (0) | 2022.09.15 |
MySQL에서 BLOB와 TEXT 데이터 유형의 차이점은 무엇입니까? (0) | 2022.09.15 |
help() 출력에서 슬래시는 무엇을 의미합니까? (0) | 2022.09.15 |
Bower: ENOGIT Git이 설치되어 있지 않거나 PATH에 없습니다. (0) | 2022.09.15 |