Validation Seems like a lot of talk recently about validation: http://www.snook.ca/archives/php/cakephp_data_va_1/ http://groups.google.com/group/cake-php/browse_thread/thread/985aa4578f79828e/f98b966dffb76a0e http://groups.google.com/group/cake-php/browse_thread/thread/bec26338072a9e9b/7a47a67e615563ba http://groups.google.com/group/cake-php/browse_thread/thread/6cedea09efb607fc/4996370ee1598ce9
Like Kabuto in the last thread, "I tried asking in IRC, but nobody there was able to help me". I also had very little joy on IRC. The Cake developers may be getting sick of these questions, but people new to Cake may find it confusing. Anyway, here's how I have implemented validation for 1.1.4.3104 To solve "Strange beforeValidate() behaviour" https://trac.cakephp.org/ticket/932 copy /cake/app_model.php and put it in the /app/ directory. Add this method to app/app_model.php function invalidFields($data = array()) { if(!isset($this->data) || empty($this->data)){ //I've added this $this->data = $data; //I've added this } //I've added this if (!$this->beforeValidate()) { return false; } if (!isset($this->validate)) { return true; } if (!empty($data)) { $data = $data; } elseif (isset($this->data)) { $data = $this->data; } if (isset($data[$this->name])) { $data = $data[$this->name]; } foreach($this->validate as $field_name => $validator) { if (isset($data[$field_name]) && !preg_match($validator, $data[$field_name])) { $this->invalidate($field_name); } } return $this->validationErrors; } /****** controller ******/ function whatevers() { if ($this->Whatever->validates($this->data)) { // save $this->Whatever->save($this->data); } else { // validation errors $this->validateErrors($this->Whatever); // used by tagSelect() method in view. $selected parameter shows selected option $this->set('selected_size', $this->params['data']['Whatever']['size_id']); $this->set('selected_brand', $this->params['data']['Whatever']['brand_id']); $this->render(); } } /****** model *******/ class Whatever extends AppModel { var $name = 'Whatever'; var $validate = array( 'size_id'=>'/[1-9]/', 'brand_id'=>'/[1-9]/') ; function beforeValidate() { // code for date validation goes here... // I use PEAR Date, which I haven't shown here... // to invalidate fields: $this->invalidate('start_date'); // to enable html helper to add class="form_error" to the input tag (in the view) $this->invalidate('finish_date'); // to enable html helper to add class="form_error" to the input tag (in the view) $this->invalidate('start_date_blank'); // enables tagErrorMsg() to show the error in the view $this->invalidate('finish_date_blank'); // enables tagErrorMsg() to show the error in the view $this->invalidate('date_range_negative'); // enables tagErrorMsg() to show the error in the view return true; } } /****** view *******/ <form id="quote" method="post" action="/whatever"> <fieldset> <legend>Whatever</legend> <label for="start_date">Start Date</label> <p><?php echo $html->input('Whatever/start_date')?><br />day/month/year</p> <?php echo $html->tagErrorMsg('Quote/start_date_blank', 'Start date is required.'); ?> <label for="finish_date">Finish Date</label> <p><?php echo $html->input('Whatever/finish_date')?><br />day/month/year</p> <?php echo $html->tagErrorMsg('Quote/finish_date_blank', 'Finish date is required.'); ?> <?php echo $html->tagErrorMsg('Quote/date_range_negative', 'Finish date must be later than the start date.'); ?> <p><?php echo $html->selectTag('Whatever/size_id',$size_select,$selected_size,NULL,NULL,false,true) ;?></p> <p><?php echo $html->selectTag('Whatever/brand_id',$brand_select,$selected_brand,NULL,NULL,false,true) ; ?></p> <p><input type="submit" value="Show" /></p> </fieldset> </form> --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Cake PHP" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/cake-php -~----------~----~----~----~------~----~------~--~---
