Простая форма без модели в CakePHP - PullRequest
4 голосов
/ 25 апреля 2011

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

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

Итак, я добавляю форму в view.ctp

print $this->Form->create('', array('action' => 'sendemail')); 
print $this->Form->input('name',array('label' => __('Name',true).':'));
print $this->Form->input('country',array('label' => __('Country',true).':'));
print $this->Form->input('email',array('label' => __('E-mail',true).':'));
print $this->Form->input('question',array('type' => 'textarea', 'label' => __('Your question',true).':'));
print $this->Form->end(__('Send', true));

и добавляю функцию sendemail в products_controller.php

function sendemail(){          
  if(!empty($this->data)){        
    if($this->data['Product']['name'] && $this->data['Product']['country'] && $this->data['Product']['email'] && $this->data['Product']['question']){
      // sending email
      $this->Session->setFlash(__('Thanks, your qustion was send.', true), 'default', array('class' => 'message status'));
      $this->redirect($this->referer());        
    } else {
      // validation
      $this->Session->setFlash(__('Fill all fiels', true), 'default', array('class' => 'message error'));
      $this->redirect($this->referer());        
    }
  } else {      
    $this->Session->setFlash(__('Error occurred', true), 'default', array('class' => 'message error'));
    $this->redirect($this->referer());
  }    
}

Так есть ли способ как проверитьправильно ли заполнена форма, и если после перенаправления какое-то поле не заполняется, это поле будет установлено как ошибка ввода формы?Также, как я могу вернуть все уже заполненные поля обратно в форму?

Спасибо за любую помощь!

1 Ответ

7 голосов
/ 25 апреля 2011

Вам не нужна таблица базы данных, но поддержка валидации CakePHP неразрывно связана с моделями. Ваш код будет намного чище, чем любая альтернатива, создав фиктивную модель и сохранив в ней ваши правила проверки.

Чтобы обойти использование таблицы, добавьте var $useTable = false; к определению модели.

Чтобы проверить без сохранения, позвоните $this->MyModel->set($this->data);, а затем вызов $this->MyModel->validates() выполнит проверку и заполнит $this->MyModel->validationErrors для автоматического заполнения в форме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...