2014-02-19 3 views
1

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

Я использовал массив, чтобы настроить свои критерии/правила для полей:

$validate = new Validation; 
$validation = $validate->check($_POST, array(
'FirstName' => array(
        'name' => 'First Name', 
        'required' => 'TRUE'), 

'LastName' => array(
        'name' => 'Last Name', 
        'required' => TRUE)); 

Я хотел бы иметь шоу ошибки, сообщающий пользователю, он/она отсутствует обязательное поле без отображения поля name, например: FirstName требуется. Я хотел бы видеть: Имя требуется.

я петельные через каждого массива:

public function check($source, $items = array()) 
foreach($items as $item => $rules){ 
    foreach($rules as $rule => $rule_value){ 
     echo "{$item} {$rule} must be {$rule_value}<br>"; 
    } 
} 
} 

Когда я эхо из петли я мои критерии, однако, когда я хотел бы попробовать повторить из $ rule_value [0], я бы только получить первую букву этот массив.

Любые предложения?

ответ

0

Я думаю, что вы можете избавиться от второго цикла Еогеаспа и сделать что-то вроде этого:

public function check($source, $items = array()) 
{ 
    // In your example you have two arrays in $items so the following 
    // foreach will iterate two times 
    foreach($items as $item => $values) { 
     // $item is going to be 'FirstName' on the first iteration 
     // and 'LastName' on the second iteration 
     // 
     // $values are going to be the array that's associated 
     // with 'FirstName' => array(...) and 'LastName' => array(...) 
     // i.e. $values = array('name' => '...', 'required' = TRUE/FALSE) 
     // Therefore, you can easily check if a given $item is required 
     // and if the $source contains that $item or not: 
     if ($values['required'] && empty($source[$item])) { 
      echo "{$values['name']} is required!"; 
     } 

     // EDIT for your comment - validating the string length 
     if ($values['minLength'] 
      && strlen($source[$item]) < $values['minLength']) 
     { 
      echo "{$values['name']} must be at least {$values['minLength']} characters."; 
     } 
    } 
} 

Что выше код делает, что она проходит через все элементы $items и если он находит нужное поле , тогда он проверяет, имеет ли значение $source или нет (или если оно пустое) и перекликается с ошибкой (вы можете сделать разные проверки, это просто для иллюстрации примера).


Сноска: Кстати, я не знаю, как вы отделяете вид и модель, но я считаю полезным, чтобы не повторить прямо из логических функций. Поэтому в вашей функции check я создам массив/объект со всеми этими ошибками проверки, и я верну его в представление, которое позаботится о отображении ошибок. Таким образом, вы можете контролировать, где ошибки появляются визуально, поскольку я думаю, что, возможно, полезно выделить каждое поле формы с его ошибкой.

+0

Будет ли это применяться, если я добавлю больше правил, например символы max и min? – Jamie

+0

Да, см. Мое обновление - это примерно то, как это можно сделать. Я создал онлайн-пример на http://phpassist.com/c5ea0#2. Надеюсь, что это поможет. –

+0

Отлично! Я дам ему выстрел и расскажу, как все прошло. – Jamie

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