доступ к правилам проверки в связанной модели (CakePHP) - PullRequest
0 голосов
/ 29 декабря 2010

Привет! Я пытался получить доступ к правилам проверки связанной модели с моего основного контроллера.Кажется, он не работает, и я не смог найти никаких ссылок по этому поводу.Вот что я пытаюсь сделать:

Фрагмент пользовательского контроллера:

$this->User->TalentProfile->set( $this->data );
if ($this->User->TalentProfile->validates()) {
    //it always validates and doesn't seem to see model's validation rules
}

Фрагмент модели TalentProfile:

var $validate = array (
        'first_name' => array(
            'maxLength' => array(
                    'rule' => array('maxLength', 20),  
                    'message' => 'Can not be longer than 20 characters.',
                    'last' => true
            ),
            'first_name_not_empty' => array(
                    'rule' => 'notEmpty',
                    'message' => 'This field is required',
                    'last' => true
            ),
        ),
);

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

$this->User->TalentProfile->set( array('TalentProfile',$this->data) ) );

Я тоже пытался надеяться, но результаты все еще те же:

$this->loadModel('TalentProfile');
$this->TalentProfile->set( $this->data) );

Есть кое-что, чего мне не хватает.Пожалуйста помоги!Спасибо

РЕДАКТИРОВАТЬ:

Я пытался сохранить данные формы, которые дают мне пробелы в SQL.Я думаю, что это может быть более простой проблемой, чем я думал.

1 Ответ

1 голос
/ 29 декабря 2010

При установке массива $ validate в модели TalentProfile необходимо, чтобы данные имели форму:

Array(
    [TalentProfile] => Array(
        [first_name] =>
    )
)

Небольшое объяснение того, как это работает:

ВВызовите $this->User->TalentProfile->validates() и $this->TalentProfile->validates(), вы используете методы проверки в модели TalentProfile.Это означает, что CakePHP будет проверять ваши входные данные на соответствие правилам проверки в этой модели, поэтому он ожидает, что ключ TalentProfile будет установлен в массиве (но тихо умрет, если это не так).

InВ вашем массиве $validates вы установили правила проверки для ключа с именем first_name.CakePHP воспринимает этот ключ как имя поля, которое вводится из формы.

Прямо сейчас вы принимаете входные данные как fname вместо first_name.Ваши данные также связаны с моделью User, а не с TalentProfile.

Если вы объясните, что вы пытаетесь сделать с помощью своей формы, я могу вам помочь.

...