2016-02-01 2 views
0

У меня проблема с проверкой некоторых текстовых входов с тем же именем. Я проверяю его с помощью правила проверки each. Каждое поле проверяет значение url.Yii2 каждое правило проверки для URL. Возвращает ошибку, если поле пуста

[['links'], 'each', 'rule' => [ 
    'url', 'defaultScheme' => 'http', 'skipOnEmpty' => true, 'message' => 'This url isn\'t valid' 
]], 

Это моя форма ввода:

<?= $form->field($model, 'links[]')->textInput(); ?> 

Но если мои ссылки входы пусты я получаю следующее сообщение: This url isn't valid. Это правило работает для одного входа, но не работает для нескольких.

Не могли бы вы что-нибудь посоветовать?

+0

Вы используете цикл 'foreach'? –

+0

Почему 'ссылки []', а не ссылки ...? – scaisEdge

+0

@HirenBhut, нет, $ this-> validate() return error. Я могу добавить, что он работает с проверкой «string» и не работает с «url». – andrew

ответ

1

По умолчанию вход считается пустым, если его значением является пустая строка, пустой массив или null. Вы можете настроить пустую логику обнаружения по умолчанию, настроив свойство yii\validators\Validator::isEmpty() с помощью PHP. Например,

['agree', 'required', 'isEmpty' => function ($value) { 
    return empty($value); 
}] 

Примечание: Большинство валидаторы не обрабатывать пустые входы, если их свойство yii\validators\Validator::$skipOnEmpty принимает значение по умолчанию TRUE. Они будут просто пропущены во время проверки, если их связанные атрибуты получат пустые входы. Среди основных валидаторов только captcha, по умолчанию, фильтр, требуется, и обрезка валидаторы будут обрабатывать пустые входы. http://www.yiiframework.com/doc-2.0/guide-input-validation.html

+0

Как я могу использовать его в своей ситуации? Массив со ссылками не пуст. Поля не имеют значения. Я не могу добавить sth к моему правилу с url. В документации Yii2 ничего нет. – andrew

+0

для более гибкой проверки вы можете использовать собственные функции ['links', 'exist', 'allowArray' => true, 'when' => function ($ model, $ attribute) { foreach ($ model-> ссылки как $ link) { if (..) { return true; } else { return false; }}], }], –

+0

, но я хотел использовать проверку правильности yii по умолчанию, чтобы избежать регулярных выражений и конкатенаций с помощью http/https. – andrew

1

Он был задан вопрос давно, но если кто-нибудь заканчивается на этой странице, как я ...

The Проппер образом (по крайней мере так, как я изо всех сил, чтобы выяснить), на Yii, к создать несколько моделей на одной и той же форме:

controller 
$links = []; 
for($i=0; $i<10; $i++) { 
    $links['link'. $i] = new Link(); 
} 
return $this->render('view', ['links' => $links]); 

view 
foreach($links as $index => $link) { 
    echo $form->field($link, '['. $index .']link')->textInput(); 
} 

Таким образом, вы можете даже использовать Model::validateMultiple и Model::loadMultiple.

 Смежные вопросы

  • Нет связанных вопросов^_^