Проблема с добавлением ошибок в библиотеку проверки в Кохане 3

StackOverflow https://stackoverflow.com/questions/2323095

Вопрос

Мне нужно добавить некоторые ошибки к помощнику по проверке в Кохане 3.

Вот с чем я начинаю:

            // validate form
             $post = Validate::factory($_POST)
            // Trim all fields
            ->filter(TRUE, 'trim')
            // Rules for name
            ->rule('first-name', 'not_empty')
            ->rule('last-name', 'not_empty')

            // Rules for email address
            ->rule('email', 'not_empty')
            ->rule('email', 'email')

            // Rules for address stuff
            ->rule('address', 'not_empty')
            ->rule('suburb', 'not_empty')
            ->rule('state', 'not_empty')
            ->rule('postcode', 'not_empty')

            // Rules for misc
            ->rule('phone', 'not_empty')
            ->rule('company', 'not_empty')
            ->rule('abn', 'not_empty');

Теперь я также проверяю некоторые вещи и добавлять Ошибки, если возникает проблема

         if ( ! in_array($post['state'], array_keys($states))) {
                $post->error('state', 'not_found');
            }


            if ( $this->userModel->doesEmailExist($post['email'])) {
                $post->error('email', 'already_exists');
        }

Я сделал немного var_dump() на них и они находятся Возвращающиеся значения, которые должны добавить ошибку!

Однако, когда я звоню $post->check(), Похоже, что это только подтверждает правила, которые я добавил в первом блоке кода выше.

У меня есть соответствующие значения в моем/Application/messages/join.php

<?php defined('SYSPATH') or die('No direct script access.');

return array(
    'not_empty'    => ':field must not be empty.',
    'matches'      => ':field must be the same as :param1',
    'regex'        => ':field does not match the required format',
    'exact_length' => ':field must be exactly :param1 characters long',
    'min_length'   => ':field must be at least :param1 characters long',
    'max_length'   => ':field must be less than :param1 characters long',
    'in_array'     => ':field must be one of the available options',
    'digit'        => ':field must be a digit',
    'email'        => array(
        'email' => 'You must enter a valid email.',
        'already_exists' => 'This email is already associated with an account'
    ),

    'name'         => 'You must enter your name.',
);

Я здесь что -то не так? Спасибо

Обновлять

Я только что сделал несколько быстрых отлаживания вещей в библиотеке проверки, а именно сбрасывая _errors собственность после каждого звонка в error метод

Что я могу видеть, так это то, что мои ошибки добавляются, но затем перезаписаны (возможно, противоречивая с правилами, которые я добавил выше). Это нормально?

Это было полезно?

Решение

В качестве альтернативного способа (если вы не хотите взламывать ядро), вы можете использовать валидаторы обратного вызова. Тогда ваш код будет выглядеть как:

    $post->callback('state', array($this, 'doesStateExist'));
    $post->callback('email', array($this->userModel, 'doesEmailExist'));

Другие советы

Ты всегда должен бегать $validate->check() Прежде чем делать свои собственные чеки и добавлять ошибки. Ответ Мезе будет лучше.

Я нашел другой способ добавления сообщений об ошибках:

$errors = array();

if (!$post->check()) {
   $errors += $post->errors();
}

if (!isset($_POST['something'])) {
   $errors['something'] = 'Please enter something';
}

if (empty($errors)) {
  $orm->save();
  return;
}

$tpl->error_fields($errors);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top