2010-10-27 4 views
1

Я использую контроллер учетной записи, который не имеет своей таблицы, но использует модель пользователя.Cakephp Validation

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

Посмотреть

<?php echo $this->Form->input('id'); ?> 
       <label for="UserPassword">New Password:</label> 
       <?php echo $this->Form->text('password', array('type' => 'password', 'value' => 'harsha')); ?><em>Password must be min 6 characters.</em> <?php echo $form->error('password'); ?> 

Controller Action

  if($this->User->saveField('password', $this->data['User']['password'], array('validate' => 'first'))) { 
       $this->Session->setFlash('Password has been changed.', 'flash-success'); 
      } else { 
       $this->Session->setFlash('There was some problem with our system. Please try after some time.', 'flash-warning'); 
      } 

ответ

3

Попробуйте debug() ИНГ содержимое $this->validationErrors на ваш взгляд, а также $this->data в вашем контроллере сразу после отправки формы. Это должно дать вам гораздо больше информации для работы.

Я подозреваю, что ваша проблема Cake строит форму входа на основе неправильной модели - построение поля формы для Account.id и Account.password вместо User.id и User.password. Это связано с тем, что FormHelper берет свою модель по умолчанию из контроллера/вида, из которого вызывается, из которого в вашем случае отображается AccountsController.

Для того, чтобы генерировать User.id и User.password полой обработка представления вашего контроллера ожидает, вам необходимо предварять User. в ваших FormHelper вызовов. Таким образом:

$this->Form->input('User.id'); 
$this->Form->text('User.password'); 
2

Вы пробовали:

echo $session->flash();

Обратите внимание: что бы ни говорило руководство, оно возвращается, а не эхо. Я зарегистрировал это некоторое время назад, и он был изменен в руководстве 1.3, но не в 1.2.

1

Привет вам, кто спрашивает
Если вы хотите, чтобы показать сообщения об ошибке, что возвращение из Validate UserModel в
Таким образом, вы можете добавить строки кода ниже после того, как формы ввода пароля

<?php 
     if ($this->Form->isFieldError('password')) { 
     echo $this->Form->error('password', array('class' => 'error')); 
    ?> 

и если вы хотите, чтобы показать error- сообщение, которое устанавливается с помощью метода setFlash
вы должны перенаправить страницу, а затем использовать $ this-> session-> вспышки («флэш-имя») в странице вы хотите показать его

<?php 
    //in UsersController 
    $this->Session->setFlash('message here', 'flash-name'); 
    //in view 
    echo $this->Session->flash('flash-name'); 
    ?> 

Удачи!

Смежные вопросы