/**
  * @param IValidator $validator
  * @param MessageBindingModel $message
  * @return IValidator
  */
 private function validateMessage(IValidator $validator, MessageBindingModel $message)
 {
     $validator->setRule('required', $message->first_name, null, 'First Name');
     $validator->setRule('minlength', $message->first_name, 2, 'First Name');
     $validator->setRule('maxlength', $message->first_name, 30, 'First Name');
     $validator->setRule('required', $message->last_name, null, 'Last Name');
     $validator->setRule('minlength', $message->last_name, 2, 'Last Name');
     $validator->setRule('maxlength', $message->last_name, 30, 'Last Name');
     $validator->setRule('required', $message->phone, null, 'Phone');
     $validator->setRule('minlength', $message->phone, 3, 'Phone');
     $validator->setRule('maxlength', $message->phone, 20, 'Phone');
     $validator->setRule('required', $message->email, null, 'Email');
     $validator->setRule('email', $message->email, null, 'Email');
     $validator->setRule('required', $message->content, null, 'Content');
     $validator->setRule('maxlength', $message->content, 1000, 'Content');
     $validator->setRule('maxlength', $message->about, 200, 'About');
     return $validator;
 }
 /**
  * @param IValidator $validator
  * @param EstateAdBindingModel $estate
  * @return IValidator
  */
 private function validateEstateAd(IValidator $validator, EstateAdBindingModel $estate)
 {
     $validator->setRule('required', $estate->area, null, 'Area');
     $validator->setRule('gtOrEqual', $estate->area, 5, 'Area');
     $validator->setRule('ltOrEqual', $estate->area, 500, 'Area');
     $validator->setRule('int', $estate->area, null, 'Area');
     $validator->setRule('required', $estate->price, null, 'Price');
     $validator->setRule('gtOrEqual', $estate->price, 1, 'Price');
     $validator->setRule('ltOrEqual', $estate->price, 10000000, 'Price');
     $validator->setRule('int', $estate->price, null, 'Price');
     $validator->setRule('required', $estate->location, null, 'Location');
     $validator->setRule('maxlength', $estate->location, 30, 'Location');
     $validator->setRule('minlength', $estate->location, 3, 'Location');
     $validator->setRule('required', $estate->floor, null, 'Floor');
     $validator->setRule('gtOrEqual', $estate->floor, 0, 'Floor');
     $validator->setRule('ltOrEqual', $estate->floor, 100, 'Floor');
     $validator->setRule('int', $estate->floor, null, 'Floor');
     $validator->setRule('required', $estate->phone, null, 'Phone');
     $validator->setRule('maxlength', $estate->phone, 20, 'Phone');
     $validator->setRule('required', $estate->description, null, 'Description');
     $validator->setRule('minlength', $estate->description, 5, 'Description');
     $validator->setRule('maxlength', $estate->description, 5000, 'Description');
     $validator->setRule('required', $estate->is_furnished, null, 'Is Furnished');
     $validator->setRule('required', $estate->ad_type, null, 'Ad Type');
     $validator->setRule('required', $estate->category_id, null, 'Category');
     $validator->setRule('required', $estate->city_id, null, 'City');
     $validator->setRule('mimeTypes', $estate->main_image, 'jpg,gif', 'Main Image');
     $validator->setRule('lt', $estate->main_image['size'], 20971520, 'Main Image');
     $validator->setRule('postMaxSize', ini_get('post_max_size'), null, null);
     foreach ($estate->images as $image) {
         $validator->setRule('mimeTypes', $image, 'jpg,gif', 'Main Image');
         $validator->setRule('lt', $image['size'], 20971520, 'Main Image');
     }
     return $validator;
 }