The rules() method, like most of the Yii methods, returns an array of data:
The first, most obvious, restriction is to indicate that a field is required. Just use a comma-separated string of field names as the first returned value and the word required as the second:
You can also specify that a value must be a number or, more specifically, an integer. This syntax is slightly different. Here, I indicate that the ext field must be an integer:
For strings, you can restrict the length to a maximum value:
Or a minimum value:
public function rules() { return array ( /* actual rules */ ); } |
array ( 'name, email, subject, body' , 'required' ), |
array ( 'ext' , 'numerical' , 'integerOnly' =>true), |
array ( 'name' , 'length' , 'max' =>40), |
array ( 'name' , 'length' , 'min' =>6), Or both:
array ( 'link' , 'url' ),
There’s also a rule to indicate which fields should be safe to search on. By default, every rule is made safe in a search, but you may want to change that behavior by removing fields from the list:
In the Department Model, this relation is defined:
The relations between Models is a key player in complex MVC sites. Through properly defined relations, associated content can be retrieved. You’ll learn more about this in the next couple of posts. Moving on, a more trivial, but still nice, method is attributeLabels(). This method returns an associative array of fields and the labels to use for those fields in forms, error messages, and so forth. The Yii framework does a great job of making these conversations automatically, like firstName becoming First Name and departmentId becoming just Department. But you may want to still customize these. For the Employee Model, here’s what I have: public function attributeLabels() { return array ( 'id' => 'Employee ID' , 'departmentId' => 'Department' , 'firstName' => 'First Name' , 'lastName' => 'Last Name' , 'email' => 'Email' , 'ext' => 'Ext' , 'hireDate' => 'Hire Date' , 'leaveDate' => 'Leave Date' , ); } |
Complete Example
<?php class PasswordReset extends CActiveRecord { public static function model($className=__CLASS__) { return parent::model($className); } public function tableName() { return 'password_reset'; } public function rules() { return array( array('user_user_id, request_time, request_hash, request_done', 'required'), array('user_user_id, request_time, request_done', 'numerical'), array('request_done','length','min'=>6, 'max'=>1), array('request_time','length','min'=>6, 'max'=>10), array('request_hash','length','max'=>100), array('user_user_id, request_time, request_hash, request_done', 'safe', 'on'=>'search') ); } public function relations() { return array( 'User' => array(self::BELONGS_TO, 'User', 'user_user_id') ); } public function attributeLabels() { return array( 'request_time' => 'Request Time', 'request_hash' => 'Request Hash', 'request_done' => 'Request Done' ); } public function search() { $criteria=new CDbCriteria; $criteria->compare('request_time', $this->request_time, true); $criteria->compare('request_hash', $this->request_hash, true); $criteria->compare('request_done', $this->request_done, true); $criteria->compare('User.id', $this->User->id); $criteria->compare('request_done', '0', true); return new CActiveDataProvider($this, array( 'criteria'=>$criteria )); } public function findByParameter($fieldname, $fieldvalue) { $criteria=new CDbCriteria; $criteria->compare($fieldname, $fieldvalue, true); return new CActiveDataProvider($this, array( 'criteria' => $criteria )); } public function findByParameters($parameters) { $criteria=new CDbCriteria; foreach ($parameters as $key => $value) { $criteria->compare($key, $value, true); } return new CActiveDataProvider($this, array( 'criteria' => $criteria, )); } public function getRequestList() { $parameters = array('request_done' => '0'); $requests = PasswordReset::model()->findByParameters($parameters); return CHtml::listData($requests->getData(), 'password_reset_id', 'request_hash'); } } ?>
No comments:
Post a Comment