Kohana 3.1 обратный вызов для проверки страны - PullRequest
0 голосов
/ 16 июня 2011

Я пытаюсь настроить функцию регистрации на своем сайте, и мне нужно проверить ввод пользователя в страну выбранного типа:

public function rules()
    {
        return array(
            ......
            'country' => array(
                array('not_empty'),
                array('digit'),
                array(array($this, 'country_from_list'), array(':validation', ':field'))
            ),
            ......
        );
    }

, и вот мой обратный вызов:

public static function country_from_list($values)
{
    // array id => value
    $countries = ORM::factory('country')->getActive('array');

    return Validation::factory($values)
        ->rule('country', 'in_array', array(':value', $countries));
}

но это не работает.Есть идеи?Я пытаюсь портировать его с Kohana 3.0.9 ...

Ответы [ 2 ]

0 голосов
/ 16 июня 2011

Если вы передаете объект Validation методу обратного вызова, вы можете сделать на нем пользовательскую ошибку, если она не соответствует вашему условию. (внутри вашего обратного вызова: $ validation-> error (...))

В противном случае ваш обратный вызов должен принять значение поля, вернуть bool и выглядеть так:

// The callback method is static, you shouldn't call it on the instance.
array(array('Model_Whatever::country_from_list'), array(':value'))

И метод:

public static function country_from_list($value)
{
    return in_array($value, ORM::factory('country')->getActive('array'));
}
0 голосов
/ 16 июня 2011

Есть одна проблема (по крайней мере). Следующее:

array(':value', $countries)

на самом деле массив, где:

  • первый элемент - :value строка,
  • второй элемент является результатом ORM::factory('country')->getActive('array'),

Но я не эксперт в валидации Kohana 3.1 - я слышал, что она изменилась с 3.0.

...