2015-07-22 3 views
0

В CodeIgniter при проверке массива полей ввода текста можно получить каждый индекс массива для сообщения об ошибке?CodeIgniter Array Text Form Form Validation

У меня есть (по умолчанию) три поля, первые два требуются, и больше полей и динамически добавляются или удаляются.

<input name="url[]" value="" type="text"> 
<input name="url[]" value="" type="text"> 
<input name="url[]" value="" type="text"> 

Сейчас я Переберите входных массивов

foreach ($data ['urls'] as $idx => $url) 
{ 
    $num = $idx + 1; // counting number 
    $this -> form_validation -> set_rules('url[' . $idx . ']', 'Url ' . $num, 'trim|callback_validate_input_url[ ' . $idx . ' ]'); 
} 

Вместо

$this->form_validation->set_rules('url[]', 'URL', 'trim|callback_validate_input_url'); 

и я проверить его с помощью пользовательского обратного вызова

public function validate_input_url ($uri, $position) 
{ 
    if ($position <= 1 && !$uri) // check if it's the first two input arrays and if they're empty 
    { 
     $this -> form_validation -> set_message('validate_input_url', 'This field cannot be empty'); 
     return false; 
    } 

    if ($position >= 2 && !$uri) 
     return true; // true if it's the third or later optional URL 

    $pattern = '/^http:\/{2}.*/'; 
    // must start with http:// 
    if (!preg_match($pattern, $uri)) 
    { 

     $this -> form_validation -> set_message('validate_input_url', 'This field must have a valid URL'); 
     return false; 
    } 
    return TRUE; 
} 

Таким образом, я может получить сообщение об ошибке для ввода ge nerated ошибки

<?php 
    foreach ($urls as $idx => $url) { 
?> 
    <input type="text" name="url[]" value="<?php echo $url ?>"> 
    <?php echo form_error('url[' . $idx . ']'); ?> 
<?php 
} ?> 

Так есть ли способ, чтобы получить сообщение об ошибке для поля ввода, вызвавшей ошибка без перебора всех полей ввода и прикрепления правила для каждого из них в отдельности? Я просмотрел документы, и я ничего не видел об этом. Поэтому я не уверен, что я что-то упустил, или если я это делаю, это единственный способ.

+0

validation_errors() аналогичен form_error(), за исключением того, что позволяет отформатировать HTML вокруг ошибки. Я хочу/должен иметь возможность получить ошибку для поля ввода, где произошла ошибка, а не просто произвольно сказать, что была ошибка в каком-либо поле (ах) - без необходимости сначала прокручивать представленные URL-адреса, чтобы назначить отдельное правило их. –

ответ

0

Вы спрашиваете, как вы спрашиваете: «Есть ли способ увидеть, что вызвало ошибку, не проверяя все, что могло вызвать ошибку». Если это вопрос, ответ - нет. Вы должны назначить правила проверки для каждого ввода, а затем, если вы хотите найти тот (или более), который вызвал ошибку, вам нужно их искать. Вы можете немного упростить свой подход, используя Таблицы правил валидации, которые объясняются здесь https://ellislab.com/codeigniter/user-guide/libraries/form_validation.html, но я не вижу, как вы избегаете проверки каждой вещи, которая может вызвать ошибку, чтобы увидеть, что вызвало ошибку. В общем, ваш подход кажется прекрасным, почему вы хотите его изменить?