Как проверить поле формы в CakePHP, используя модель и контроллер

Я создал форму, которую мне нужно проверить, используя модель и контроллер. Вот моя форма

index.ctp

    <?php echo $this->Form->create('Contact',array('url'=>array('controller'=>'contacts','action'=>'add')));

echo $this->Form->text('name');

Модель: Contact.php

class Contact extends AppModel
{
var $name = 'Contact';
var $useTable = false;

public $validate = array(
'name' => array(
'alphaNumeric' => array(
'rule'     => 'alphaNumeric',
'required' => false,
'message'  => 'Letters and numbers only'
),
'between' => array(
'rule'    => array('between', 5, 15),
'message' => 'Between 5 to 15 characters'
)
)
);
}

Контроллер: ContactsController.php

public function add()
{
$this->Contact->validates();

$this->request->data['Country']['country_name']=$this->request->data['Contact']['country'];

$this->Country->saveall($this->request->data);

$this->redirect('/Contacts/index/');

}

Я пытаюсь провести валидацию, прибегая к помощи Google, но мне это кажется трудным, поэтому, если кто-нибудь сможет описать процесс, это будет очень полезно. Моя версия cakephp — 2.3.8. Мне просто нужно проверить это поле имени, так как, когда я нажимаю на кнопку отправить, оно показывает это сообщение в форме.

0

Решение

Ваш код контроллера должен быть таким
Процесс проверки в CakePHP похож на

1) as you have defined validation rules in CakePHP model public `$validates = array();`

2) when ever you do a save on particular model directly or through any association
a callback method beforeValidate for that model gets called to validate the data which is being saved.

3) once the data is validated then beforeSave callback is called after this save method is called.

4) we can also validate the form input fields in controller using $this->Model->validates() but then while saving we have to disable the beforeValidate callback by doing

$this->Model->save($data,array('validate'=>false));

В противном случае вы закончите проверку одних и тех же данных дважды.

код вашего контроллера должен быть примерно таким.

public function add() {
// here we are checking that the request is post method
if ($this->request->is('post')) {
$this->request->data['Country']['country_name']
= $this->request->data['Contact']['country'];
// here we are saving data
if ($this->Contact->saveAll($this->request->data)) {

//here we are setting a flash message for user
$this->Session->setFlash('your record has been added','success');

$this->redirect(array('controller'=>'contacts','action' => 'index'));
} else {
//here we are setting a flash message for user for error if input are not
//validated as expected
$this->Session->setFlash('sorry we could add your record','error');
}

}

}

Для получения дополнительной информации вы всегда можете обратиться к http://book.cakephp.org/2.0/en/models/callback-methods.html

1

Другие решения

Других решений пока нет …