May*_*onn 31 php validation enums laravel
我在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'
]);
Run Code Online (Sandbox Code Playgroud)
有可能吗?
Jos*_*ick 81
https://laravel.com/docs/10.x/validation#rule-enum
use App\Enums\ServerStatus;
use Illuminate\Validation\Rules\Enum;
$request->validate([
'status' => [new Enum(ServerStatus::class)],
]);
Run Code Online (Sandbox Code Playgroud)
枚举:
namespace App\Enums;
enum ServerStatus: string {
case ACTIVE = 'active';
case INACTIVE = 'inactive';
}
Run Code Online (Sandbox Code Playgroud)
需要 PHP 8.1+
Alu*_*tha 77
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'
]);
Run Code Online (Sandbox Code Playgroud)
:)
可接受的答案是可以的,但是我想添加如何设置in规则以使用现有的常量或值数组。
因此,如果您有:
class MyClass {
const DEFAULT = 'default';
const SOCIAL = 'social';
const WHATEVER = 'whatever';
...
Run Code Online (Sandbox Code Playgroud)
您可以使用Illuminate\Validation\Rule的in方法制定验证规则:
'type' => Rule::in([MyClass::DEFAULT, MyClass::SOCIAL, MyClass::WHATEVER])
Run Code Online (Sandbox Code Playgroud)
或者,如果您已经将这些值分组在数组中,则可以执行以下操作:
class MyClass {
const DEFAULT = 'default';
const SOCIAL = 'social';
const WHATEVER = 'whatever';
public static $types = [self::DEFAULT, self::SOCIAL, self::WHATEVER];
Run Code Online (Sandbox Code Playgroud)
然后将规则写为:
'type' => Rule::in(MyClass::$types)
Run Code Online (Sandbox Code Playgroud)
您可以按照文档指示使用Rule类。例如,在迁移中具有以下定义:
$table->enum('letter',['a','b','c']);
Run Code Online (Sandbox Code Playgroud)
现在您的 FormRequest 规则应包含:
class CheckInRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'letter'=>[
'required',
Rule::in(['a', 'b','c']),
],
];
}
}
Run Code Online (Sandbox Code Playgroud)
其中,必须包含“ enun ”Rule::in (['a', 'b', 'c'])类型字段的值
这对我来说在 Laravel 8.x 上工作得很好