Соблюдайте валидацию, не в состоянии проверить элементы массива - PullRequest
0 голосов
/ 11 февраля 2019

Я использую уважение, встроенное в проверку из этого источника в моем приложении php "https://respect -validation.readthedocs.io / en / 1.1 / rules / Each / ".Я передаю данные с помощью ajax-вызова в код приложения php, например

print_r($itemsArray);

Array
(
  [0] => Array
    (
        [itemName] => apple
    )

 [1] => Array
    (
        [itemName] => banana
    )

 [2] => Array
    (
        [itemName] => cherry
    )
)

. Я применил проверку к полям ниже на стороне кода php, например.

   $fullName = $_REQUEST['fullName'];
   $email = $_REQUEST['email'];
   $phoneNumber = $_REQUEST['phoneNumber'];
   $age = $_REQUEST['age'];
   $itemsArray = $_REQUEST['itemsArray'];

   try 
   {
      v::key('fullName', v::notEmpty()->setTemplate("Full Name: Required field"))
       ->key('fullName', v::alpha()->setTemplate("Full Name: Alphabets only"))
       ....
       ....
       ->key('itemsArray', v::arrayVal()->each(v::alpha())->setTemplate("Item must contain Alphabets"))

         ->assert(['fullName' => $fullName, 'email' => $email, 'phoneNumber' => $phoneNumber, 'age' => $age, 'itemsArray' => $itemsArray ]);    
   }
    catch(NestedValidationException $e) 
   {
      $errorMessage = $e->getMessages();
   }

Все проверки применяютсядля полей, таких как полное имя, адрес электронной почты, номер телефона и возраст работают отлично.Единственная проблема связана с ключом itemsArray (правилом валидации), примененным к этому массиву.Он отображает сообщение об ошибке для вышеуказанных элементов, несмотря на то, что эти элементы являются правильными в соответствии с правилом проверки v :: alpha ().Также он выдает сообщение проверки 4 раза вместо трех раз.Ниже приведен вывод для трех элементов: яблока, банана и вишни.

 Array
 (
    [0] => Item must contain Alphabets
    [1] => Item must contain Alphabets
    [2] => Item must contain Alphabets
    [3] => Item must contain Alphabets
 )

Я не могу отследить проблемы.Пожалуйста, помогите !!!

1 Ответ

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

Вы можете достичь этого, пожалуйста, попробуйте.

->key('itemsArray', v::arrayVal()->each( v::key('itemName', v::alpha()))
...