Laravel: правила условной проверки - PullRequest
1 голос
/ 17 февраля 2020

В моем приложении laravel мне нужно применить правила проверки на условных основах. Например: в методе Store поле password является обязательным и мин. Символы: 6. Но в поле Update метод password поле не требуется, однако, если пользователь вводит пароль, оно должно быть больше чем 6 символов.

SomeController. php

private function validations($customRules = [])
{
    # variables
    $rules = [
        'contact_person' => 'required|min:2',
        'mobile_number'  => 'required|numeric',
        'pword'          => 'required|min:6',
        'email'          => 'required|email',
        'address'        => 'required',
        'status'         => 'required',
    ];
    $messages = [
        'contact_person.required' => '`<strong class="style-underline">Contact person</strong>` - Required',
        'contact_person.min'      => '`<strong class="style-underline">Contact person</strong>` - Must be at least :min chars',

        'mobile_number.required' => '`<strong class="style-underline">Mobile number</strong>` - Required',
        'mobile_number.numeric'  => '`<strong class="style-underline">Mobile number</strong>` - Must be a numeric value',

        'email.required' => '`<strong class="style-underline">Eamil</strong>` - Required',
        'email.email'    => '`<strong class="style-underline">Email</strong>` - Must be a valid email address',

        'pword.required' => '`<strong class="style-underline">Password</strong>` - Required',
        'pword.min'      => '`<strong class="style-underline">Password</strong>` - Must have a at least :min characters',

        'status.required' => '`<strong class="style-underline">Status</strong>` - Required',
    ];

    if(!empty($customRules))
        $rules = \array_merge($rules, $customRules);

    # returning
    return request()->validate($rules, $messages);
}

После изменения правил в соответствии с требованием метода update поле pword имеет вид проверено на минимальные символы. Что не должно происходить, поскольку поле оставлено пустым.

В настоящее время Я вынужден сделать это.

public function update()
{
    ...

    # validating submitted data
    if(!empty(request()->pword))
        $this->validations([ 'pword' => 'min:6' ]);
    else
        $this->validations([ 'pword' => '' ]);

    ....
}

1 Ответ

1 голос
/ 17 февраля 2020

Вы можете использовать nullabe вместо required, пустое значение преобразуется в ноль, если вы используете eloquent, из-за ниже промежуточного программного обеспечения

    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,

Таким образом, ваш метод будет выглядеть как

private function validations($request,$update = false){
    $rules = [
        'contact_person' => 'required|min:2',
        'mobile_number'  => 'required|numeric',
        'pword'          => 'nullable|min:6',
        'email'          => 'required|email',
        'address'        => 'required',
        'status'         => 'required',
    ];

}
...