2012-04-21 4 views
2

У меня проблема .. Я попробовал заполнить форму, затем нажмите кнопку отправки, а затем отобразит ошибку формы, но все поля текстового поля пустуют пустым, могут показать ошибку формы. Я хочу, чтобы он стал тем же значением, что и до проверки. как я не хочу очистить/выпустить значение после проверки.Cakephp После проверки, все поля формы пустуют с ошибкой формы

я сделал что-то вроде этого: (в представлении)

<div class="regform"> 
     <div id="formleft">First Name<asterix>*</asterix></div> 
     <div id="formright"><?php echo $this->Form->input('First Name', array(
       'name' => 'firstname', 
       'label'=> false 
      )); ?></div> 
     <div id="formerror"><?php echo $this->Form->error('Customer.firstname'); ?></div> 
    </div> 

(в модели):

'firstname' => array(
        'firstname_cant_be_empty' => array(
          'rule' => 'notEmpty', 
          'message' => 'First Name must be filled.' 
         ), 
        'firstname_must_be_alphabet' => array(
          'rule' => '/^[a-z]{3,}$/i', 
          'message' => 'First Name is only letters. No numbers, Dotted, etc.' 
         ) 
       ) 

(в контроллере):

if ($this->request->is('Post')) { 

      if ($this->Customer->save($this->request->data) && $this->Customer->validates()) { 
       //debug($this->request->data); 
       $this->Session->setFlash('good!'); 
       //$this->redirect('/'); 
      } else { 
       $this->Session->setFlash('Fill up form now!'); 
       $this->data = $this->request->data; 
      } 

     } 
+0

Я не думаю, что вам нужно $ this-> Customer-> validates(), потому что оно уже делает это в методе сохранения. – jimiyash

ответ

8

Проблема находится в вашем вид:

<div id="formright"><?php echo $this->Form->input('First Name', array(
      'name' => 'firstname', 
      'label'=> false 
     )); ?></div> 

В частности:

$this->Form->input('First Name', array(

и

'name' => 'firstname', 

Это приводит к тому, чтобы быть элемент формы, чтобы быть сгенерирован, как:

<input id="UserFirstname" type="text" maxlength="50" name="firstname"> 

Ваш вход форма должна вместо того, чтобы быть таким:

echo $this->Form->input('firstname', array(
      'label'=> false 
    )); 

Обратите внимание на отличия. Это приводит к тому, элемент формы, чтобы быть сгенерирован как:

<input id="UserFirstname" type="text" maxlength="50" name="data[User][firstname]"> 

Основное отличие заключается в name="data[User][firstname]". Это заставляет данные размещаться в знакомом формате массива данных $ this-> request->, что также позволяет заполнить форму при ошибках формы.

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