web-dev-qa-db-ja.com

Laravelで値がnullでない場合に入力フィールドを検証する方法

laravel 5.4でユーザーを作成および更新しようとしています

これは、ユーザーの作成用に追加された検証です。できます。

$this->validate($request, [
    'name' => 'required|max:255',
    'email' => 'required|email|max:255|unique:users',
    'password' => 'required|min:6|confirmed',
]);

更新時には、パスワードフィールドは不要です。ただし、パスワードフィールドがnullでない場合は、min:6および確認済みのルールを検証します。 sometimes ..で試してみましたが、動作していません。

$this->validate($request, [
    'name' => 'required|max:255',
    'email' => 'required|email|max:255|unique:users,email,'.$id,
    'password' => 'sometimes|min:6|confirmed',
]);
9
noufalcep

ルールとしてヌル可能を使用してみてください

'password' => 'nullable|min:6|confirmed',

https://laravel.com/docs/5.8/validation#a-note-on-optional-fields を参照してください

25
Rejinderi

列がNULL可能の場合

'password' => 'nullable|min:6|confirmed',

@Rejinderiの答えは正しいです!

列がNULL可能でない場合(これは他の人に役立つかもしれません)

'password' => 'sometimes|required|min:6|confirmed',

結果

username = 'admin',
password = null // fail- required

username = 'admin',
password = 123 // fail- min:6

username = 'admin' // pass- validate only exist
1
C.V

パスワードフィールドに基づいてルールを作成します。パスワードフィールドが存在する場合のみ検証します。

if ($request->input('password')) {
    $rules = [
        'name' => 'required|max:255',
        'email' => 'required|email|max:255|unique:users,email,'.$id,
        'password' => 'required|min:6|confirmed',
    ];
} else {
    $rules = [
        'name' => 'required|max:255',
        'email' => 'required|email|max:255|unique:users,email,'.$id
    ];
}

$this->validate($request, $rules);
0
linktoahref

これは私がそれをする方法です:

//For new or create :
$this->validate($request, [
    'name' => 'required|max:255',
    'email' => 'required|email|max:255|unique:users',
    'password' => 'required|min:6|confirmed',
]);

//For edit or update:
$this->validate($request, [
    'name' => 'required|max:255',
    'email' => 'required|email|max:255|unique:users',
    'password' => 'min:6|confirmed',//just remove required from password rule
]);

説明:
この方法では、リクエストで定義(存在)される場合にのみ値が検証されます
nullableを使用すると、バリデーターはnullを値(私は受け入れられないと思います)
更新からpassword検証を削除すると、この入力は検証されなくなり、任意の値が受け入れられます(これも受け入れられません)。

0
Jarik Voroniak