2014-10-10 3 views
0

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

index.ctp

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

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

Модель: Контакт .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/'); 

    } 

Я пытаюсь выполнить проверку по googling, но мне кажется трудным для меня, поэтому, если кто-нибудь может описать процесс, это будет большой помощью. Моя версия cakephp - 2.3.8. Мне просто нужно проверить это поле имени, так как когда я нажимаю кнопку «Отправить», оно отображает это сообщение в форме.

+0

Ваш вопрос довольно неясно. Также обязательно указывайте свою точную версию CakePHP и соответствующим образом пометьте свой вопрос! Это сказано: ** http: //book.cakephp.org/2.0/en/models/data-validation/validating-data-from-the-controller.html** – ndm

+0

$ this-> Contact-> validates() ; возвращает логическое значение true или false в зависимости от действительных или onvalid данных, а также использовать $ this-> Contact-> set ($ this-> request-> data); до $ this-> Contact-> validates(); – Abhishek

+0

Я также отредактировал свой вопрос, когда я положил $ this-> Contact-> validates() после того, как форма представила его, показывая мне эту ошибку Неустранимая ошибка: вызов функции-члена проверяет() на не-объект в/opt/lampp /htdocs/projects/cake/cakephp/app/Controller/ContactsController.php в строке 74 .. пожалуйста, дайте мне знать, если вам понадобятся какие-либо дополнительные данные от меня – Ron

ответ

1

Ваш код контроллера должен быть, как этот Процесс валидации 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