Kohana framework « Валидация ORM Validation Exception, проверка при регистрации пользователя

Добрый день! Помогите решить проблему.

Создал форму для регистрации на сайте. Имеются поля login, email, password, password_confirm
Требуется написать правило для class Model_ORM_Validuser extends ORM. Чтобы совпадали введенные пароли из полей password, password_confirm. Делаю следующее:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .php.geshi_code {font-family:monospace;} .php.geshi_code .imp {font-weight: bold; color: red;} .php.geshi_code .kw1 {color: #b1b100;} .php.geshi_code .kw2 {color: #000000; font-weight: bold;} .php.geshi_code .kw3 {color: #990000;} .php.geshi_code .co1 {color: #666666; font-style: italic;} .php.geshi_code .co2 {color: #666666; font-style: italic;} .php.geshi_code .co3 {color: #0000cc; font-style: italic;} .php.geshi_code .co4 {color: #009933; font-style: italic;} .php.geshi_code .coMULTI {color: #666666; font-style: italic;} .php.geshi_code .es0 {color: #000099; font-weight: bold;} .php.geshi_code .es1 {color: #000099; font-weight: bold;} .php.geshi_code .es2 {color: #660099; font-weight: bold;} .php.geshi_code .es3 {color: #660099; font-weight: bold;} .php.geshi_code .es4 {color: #006699; font-weight: bold;} .php.geshi_code .es5 {color: #006699; font-weight: bold; font-style: italic;} .php.geshi_code .es6 {color: #009933; font-weight: bold;} .php.geshi_code .es_h {color: #000099; font-weight: bold;} .php.geshi_code .br0 {color: #009900;} .php.geshi_code .sy0 {color: #339933;} .php.geshi_code .sy1 {color: #000000; font-weight: bold;} .php.geshi_code .st0 {color: #0000ff;} .php.geshi_code .st_h {color: #0000ff;} .php.geshi_code .nu0 {color: #cc66cc;} .php.geshi_code .nu8 {color: #208080;} .php.geshi_code .nu12 {color: #208080;} .php.geshi_code .nu19 {color:#800080;} .php.geshi_code .me1 {color: #004000;} .php.geshi_code .me2 {color: #004000;} .php.geshi_code .re0 {color: #000088;} .php.geshi_code span.xtra { display:block; }

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

class Model_ORM_Myuser extends ORM
{
  protected $_table_name = 'users';

  public function rules()
  {
      return array(
        'username' => array(
            array('not_empty'),
                                 array('min_length', array(':value', 5)),
            array('max_length', array(':value', 32)),
        ),
               
                'password' => array(
            array('not_empty'),
                                array('matches', array(':validation', ':field', 'password_confirm')),
          ),
                'email' => array(
            array('not_empty'),
            array('min_length', array(':value', 4)),
            array('max_length', array(':value', 127)),
            array('email'),
                ),
      );    
  }
 


Выдает ошибку:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .php.geshi_code {font-family:monospace;} .php.geshi_code .imp {font-weight: bold; color: red;} .php.geshi_code .kw1 {color: #b1b100;} .php.geshi_code .kw2 {color: #000000; font-weight: bold;} .php.geshi_code .kw3 {color: #990000;} .php.geshi_code .co1 {color: #666666; font-style: italic;} .php.geshi_code .co2 {color: #666666; font-style: italic;} .php.geshi_code .co3 {color: #0000cc; font-style: italic;} .php.geshi_code .co4 {color: #009933; font-style: italic;} .php.geshi_code .coMULTI {color: #666666; font-style: italic;} .php.geshi_code .es0 {color: #000099; font-weight: bold;} .php.geshi_code .es1 {color: #000099; font-weight: bold;} .php.geshi_code .es2 {color: #660099; font-weight: bold;} .php.geshi_code .es3 {color: #660099; font-weight: bold;} .php.geshi_code .es4 {color: #006699; font-weight: bold;} .php.geshi_code .es5 {color: #006699; font-weight: bold; font-style: italic;} .php.geshi_code .es6 {color: #009933; font-weight: bold;} .php.geshi_code .es_h {color: #000099; font-weight: bold;} .php.geshi_code .br0 {color: #009900;} .php.geshi_code .sy0 {color: #339933;} .php.geshi_code .sy1 {color: #000000; font-weight: bold;} .php.geshi_code .st0 {color: #0000ff;} .php.geshi_code .st_h {color: #0000ff;} .php.geshi_code .nu0 {color: #cc66cc;} .php.geshi_code .nu8 {color: #208080;} .php.geshi_code .nu12 {color: #208080;} .php.geshi_code .nu19 {color:#800080;} .php.geshi_code .me1 {color: #004000;} .php.geshi_code .me2 {color: #004000;} .php.geshi_code .re0 {color: #000088;} .php.geshi_code span.xtra { display:block; }

ErrorException [ Notice ]: Undefined index: password_confirm
SYSPATHclasseskohanavalid.php [ 515 ]
510    * @param   string   field name to match
511    * @return  boolean
512    */
513   public static function matches($array, $field, $match)
514   {
515     return ($array[$field] === $array[$match]);
516   }
517
518 } // End Valid
 



В чем может быть проблема?

1 ответов


Решил проблему, вынеся валидацию в отдельный блок


$myuser = new Model_ORM_Myuser();






$extra_validation = Validation::factory(
        array('password' => Arr::get($_POST, 'password'),
              'password_confirm' => Arr::get($_POST, 'password_confirm'))
        );

        $extra_validation->rule('password' , 'not_empty')
                         ->rule('password' , 'min_length', array(':value', 5))
                         ->rule('password' , 'max_length', array(':value', 32))
                         ->rule('password_confirm', 'matches', array(':validation', 'password_confirm', 'password'));
       
        try {
           
           $myuser->save($extra_validation);  
        }
   
        catch (ORM_Validation_Exception $e)
        {
            $this->errors = $e->errors("validation");
            return FALSE;
           
        }