web-dev-qa-db-ja.com

Laravel-検証-フィールドがnullの場合は必須

私がこのhtmlコードを持っているとしましょう:

<input type="email" name="email">
<input type="password" name="password">

またはこれ:

<input type="hidden" name="user_id" value="1">

(ユーザーがログインしている場合は、user_idフィールドのみが表示されます。それ以外の場合-資格情報フィールド)。

リクエストを作成すると、ユーザーをチェックする検証があります。フィールドuser_idが存在する場合(つまり、user_idがusersテーブルに存在する場合)、emailおよびpasswordの入力を要求する必要はありません。 user_idがない場合は、emailフィールドとpasswordフィールドが必要になります。

言い換えれば、私はこのようなことをしたいのです:

public function rules()
{
    return [
        'user_id'   => 'exists:users,id',
        'email'     => 'required_if_null:user_id|email|...',
        'password'  => 'required_if_null:user_id|...'
    ];
}
9
Eliya Cohen

検証ドキュメントをもう一度読んだ後、解決策を見つけました。 required_without検証を使用して、反対のことを行う必要がありました。

public function rules()
{
    return [
        'user_id'       => 'exists:users,id',
        'email'         => 'required_without:user_id|email|unique:users,email',
        'password'      => 'required_without:user_id',
}
16
Eliya Cohen