Объект правила не запускает метод pass () - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь реализовать валидацию с помощью Правил для валидации поля в модели;как указано в официальной документации, таким образом:

1) В папке App / Rules я помещаю файл Um.php:

<?php
 namespace App\Rules;
 use Illuminate\Contracts\Validation\Rule;
 use App\Models\Common\Item;
 class Um implements Rule
  {

/**
 * Determine if the validation rule passes.
 *
 * @param  string  $attribute
 * @param  mixed  $value
 * @return bool
 */
public function passes($attribute, $value)
{
    if(strlen($attribute) < 5)
    return false;

    return true;
}

/**
 * Get the validation error message.
 *
 * @return string
 */
public function message()
{
    return 'The field is too short ';
}

}

2) В моем классе контроллера, в методе update:

 use App\Rules\Um as RuleUm;

...

  public function update(Request $request $item)
{
   //$item is the model don't worry for this 


   //Here is where I invoke the rule 
    $request->validate([
'codum' => [ new RuleUm],
            ]);


    $item->update($request->input());

  //...son on
}

Пока все хорошо, проблема возникает, когда после обновления данных;метод pass () полностью игнорируется;и происходит, чтобы выполнить обновление.Это не зависит от логики метода, потому что он все равно возвращает false в любом случае, так же, как Laravel все еще игнорирует метод, он не выполняется.

Может кто-нибудь помочь мне?Что я делаю не так?

1 Ответ

0 голосов
/ 15 февраля 2019

Если вы работаете с пользовательским классом правил, он не будет проверяться, если поле (codum в вашем случае) пусто или отсутствует в запросе.Если вы хотите, чтобы пользовательский объект проверки запускался даже при пустом значении, вам нужно использовать ImplicitRule контракт.

См. Эту статью для того же

Короче нужно сделать:

class Um implements ImplicitRule
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...