コード例 #1
0
 /**
  * Executes the validation
  *
  * @param Phalcon\Validation $validator
  * @param string $attribute
  * @return boolean
  */
 public function validate(\Phalcon\Validation $validator, $attribute)
 {
     $flag = true;
     $value = $validator->getValue($attribute);
     $errorCode = $this->getOption('code');
     if (!is_array($value)) {
         $message = '参数必须是数组';
         $validator->appendMessage(new Message($message, $attribute, 'Nums'));
         return false;
     }
     $countVal = count($value);
     $ruleMin = $this->getOption('min');
     $ruleMax = $this->getOption('max');
     if ($ruleMin == $ruleMax) {
         if ($countVal < $ruleMin) {
             $flag = false;
         }
     } else {
         if ($countVal < $ruleMin || $countVal > $ruleMax) {
             $flag = false;
         }
     }
     if (!$flag) {
         $message = $this->getOption('message');
         if (!$message) {
             $message = 'The num is not valid';
         }
         $validator->appendMessage(new Message($message, $attribute, 'Nums'));
         return false;
     }
     return true;
 }
コード例 #2
0
ファイル: Update.php プロジェクト: alevikzs/phrest-app
 /**
  * @param Validation $validator
  * @return Validation
  */
 protected function validation(Validation $validator)
 {
     if ($this->getEmail()) {
         $validator->add('email', new Email(['message' => 'The e-mail is not valid']));
     }
     return $validator;
 }
コード例 #3
0
ファイル: Uniqueness.php プロジェクト: al35mm/Phalcon-Rocket
 /**
  * Executes the validation
  *
  * @package     base-app
  * @version     2.0
  *
  * @param object $validation Phalcon\Validation
  * @param string $field field name
  *
  * @return boolean
  *
  * @throws \Phalcon\Validation\Exception
  */
 public function validate(\Phalcon\Validation $validation, $field)
 {
     $value = $validation->getValue($field);
     $model = $this->getOption("model");
     $attribute = $this->getOption("attribute");
     if (empty($model)) {
         throw new \Phalcon\Validation\Exception("Model must be set");
     }
     if (empty($attribute)) {
         $attribute = $field;
     }
     if ($except = $this->getOption('except')) {
         $number = $model::count(array($attribute . "=:value: AND " . $attribute . "!= :except:", "bind" => array("value" => $value, 'except' => $except)));
     } else {
         $number = $model::count(array($attribute . "=:value:", "bind" => array("value" => $value)));
     }
     if ($number) {
         $label = $this->getOption("label");
         if (empty($label)) {
             $label = $validation->getLabel($field);
             if (empty($label)) {
                 $label = $field;
             }
         }
         $message = $this->getOption("message");
         $replacePairs = array(":field" => $label);
         if (empty($message)) {
             $message = $validation->getDefaultMessage("Uniqueness");
         }
         $validation->appendMessage(new \Phalcon\Validation\Message(strtr($message, $replacePairs), $field, "Uniqueness"));
         return false;
     }
     return true;
 }
コード例 #4
0
ファイル: ServiceRecord.php プロジェクト: sieg1980/pohome
 public function validation()
 {
     $validator = new Validation();
     $validator->add('start_time', new DatetimeValidator('开始时间格式有误'));
     $validator->add('end_time', new DatetimeValidator('结束时间格式有误'));
     return $this->validate($validator);
 }
コード例 #5
0
 /**
  * @param \Phalcon\Validation $validation
  * @param string              $field
  *
  * @return boolean
  *
  * @throws \Phalcon\Validation\Exception
  */
 public function validate(\Phalcon\Validation $validation, $field)
 {
     if (!is_string($field)) {
         throw new \Phalcon\Validation\Exception("Field name must be a string");
     }
     $label = $this->getOption("label");
     if (empty($label)) {
         $label = $validation->getLabel($field);
     }
     $value = $validation->getValue($field);
     if ($this->isSetOption("allowEmpty") && empty($value)) {
         return true;
     }
     // http://stackoverflow.com/questions/1418423/the-hostname-regex
     if (!preg_match('/^(?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\\.?$/', $value)) {
         $message = $this->getOption("message");
         if (empty($message)) {
             $message = "Field :field is not a valid hostname";
         }
         $replacePairs = [":field" => $label];
         $validation->appendMessage(new \Phalcon\Validation\Message(strtr($message, $replacePairs), $field, "Hostname"));
         return false;
     }
     return true;
 }
コード例 #6
0
ファイル: UsersController.php プロジェクト: robinxiong/cmsdb
 public function createAction()
 {
     $response = new Response();
     $response->setHeader('Content-Type', 'application/json');
     if ($this->request->isPost()) {
         $validation = new Validation();
         $validation->add('profilesId', new PresenceOf(array('message' => '请选择一个角色类型')));
         $messages = $validation->validate($_POST);
         $datas = array();
         if (count($messages)) {
             foreach ($messages as $message) {
                 $datas[] = $message->getMessage();
             }
             $response->setJsonContent(array('status' => 'error', 'messages' => $datas));
         } else {
             $user = new Users();
             $user->assign(array('name' => $this->request->getPost('name', 'striptags'), 'email' => $this->request->getPost('email', 'email'), 'profilesId' => $this->request->getPost('profilesId', 'int')));
             if (!$user->save()) {
                 foreach ($user->getMessages() as $message) {
                     $datas[] = $message->getMessage();
                 }
                 $response->setJsonContent(array('status' => 'error', 'messages' => $datas));
             } else {
                 $response->setJsonContent(array('status' => 'success', 'messages' => '用户添加成功'));
             }
         }
     }
     return $response;
 }
コード例 #7
0
ファイル: EventApplication.php プロジェクト: sieg1980/pohome
 public function validation()
 {
     $validator = new Validation();
     $validator->add('departure_address', new StringLength(['max' => 200, 'messageMaximum' => '出发位置的长度不能超过200字']));
     $validator->add('remark', new StringLength(['max' => 400, 'messageMaximum' => '备注的长度不能超过400字']));
     return $this->validate($validator);
 }
コード例 #8
0
ファイル: Model.php プロジェクト: cottacush/phalcon-utils
 /**
  * Executes the validation
  * Note: Explicitly supply `conditions` and `bind` options if model PK is not `id`
  * @param mixed $validation
  * @param string $attribute
  * @return bool
  */
 public function validate(Validation $validation, $attribute)
 {
     $value = $validation->getValue($attribute);
     $model_name = $this->getOption('model', null);
     $conditions = $this->getOption('conditions', null);
     $bind = $this->getOption('bind', []);
     $show_messages = $this->getOption('show_messages', true);
     /** @var \Phalcon\Mvc\Model $model */
     $model = $this->getModel($model_name);
     if (is_null($conditions)) {
         if (is_null($value)) {
             return false;
         }
         $data = $model::findFirst(["id = ?0", "bind" => $value]);
     } else {
         $data = $model::findFirst(['conditions' => $conditions, 'bind' => $bind]);
     }
     if (!$data) {
         if ($show_messages) {
             $this->addMessageToValidation($validation, 'Invalid :field supplied', $attribute, 'Model');
         }
         return false;
     }
     return true;
 }
コード例 #9
0
ファイル: Decimal.php プロジェクト: phalcon/incubator
 /**
  * {@inheritdoc}
  *
  * @param Validation $validation
  * @param string $attribute
  *
  * @return bool
  * @throws Exception
  */
 public function validate(Validation $validation, $attribute)
 {
     $value = $validation->getValue($attribute);
     $field = $this->getOption('label');
     if (empty($field)) {
         $validation->getLabel($attribute);
     }
     if (false === $this->hasOption('places')) {
         throw new Exception('A number of decimal places must be set');
     }
     if ($this->hasOption('digits')) {
         // Specific number of digits
         $digits = '{' . (int) $this->getOption('digits') . '}';
     } else {
         // Any number of digits
         $digits = '+';
     }
     if ($this->hasOption('point')) {
         $decimal = $this->getOption('point');
     } else {
         // Get the decimal point for the current locale
         list($decimal) = array_values(localeconv());
     }
     $result = (bool) preg_match(sprintf('#^[+-]?[0-9]%s%s[0-9]{%d}$#', $digits, preg_quote($decimal), $this->getOption('places')), $value);
     if (!$result) {
         $message = $this->getOption('message');
         $replacePairs = [':field' => $field];
         if (empty($message)) {
             $message = ':field must contain valid decimal value';
         }
         $validation->appendMessage(new Message(strtr($message, $replacePairs), $attribute, 'Decimal'));
         return false;
     }
     return true;
 }
コード例 #10
0
ファイル: User.php プロジェクト: cottacush/phalcon-user-auth
 /**
  * Validate user's email
  * @return bool
  */
 public function validation()
 {
     $validator = new Validation();
     $validator->add('email', new Email(['message' => 'Invalid email supplied']));
     $validator->add('email', new Uniqueness(array('message' => 'Sorry, The email has been used by another user')));
     return $this->validate($validator);
 }
コード例 #11
0
ファイル: ReCaptcha.php プロジェクト: phalcon/incubator
 /**
  * {@inheritdoc}
  *
  * @param Validation $validation
  * @param string     $attribute
  *
  * @return bool
  */
 public function validate(Validation $validation, $attribute)
 {
     $secret = $this->getOption('secret');
     $value = $validation->getValue($attribute);
     $request = $validation->getDI()->get('request');
     $remoteIp = $request->getClientAddress(false);
     if (!empty($value)) {
         $curl = curl_init(self::RECAPTCHA_URL);
         curl_setopt_array($curl, [CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => ['secret' => $secret, 'response' => $value, 'remoteip' => $remoteIp]]);
         $response = json_decode(curl_exec($curl), true);
         curl_close($curl);
     }
     if (empty($response['success'])) {
         $label = $this->getOption('label');
         if (empty($label)) {
             $label = $validation->getLabel($attribute);
         }
         $message = $this->getOption('message');
         $replacePairs = [':field', $label];
         if (empty($message) && !empty($response['error-codes'])) {
             $message = $this->messages[$response['error-codes']];
         }
         if (empty($message)) {
             $message = $validation->getDefaultMessage('ReCaptcha');
         }
         $validation->appendMessage(new Message(strtr($message, $replacePairs), $attribute, 'ReCaptcha'));
         return false;
     }
     return true;
 }
コード例 #12
0
 public function testInValid()
 {
     $array = ['ids' => ['*****@*****.**', '*****@*****.**', 1234]];
     $this->validation->add('ids', $this->testable);
     $messages = $this->validation->validate($array);
     $this->assertEquals(1, count($messages));
 }
コード例 #13
0
ファイル: Users.php プロジェクト: codeception/phalcon-demo
 public function validation()
 {
     $validator = new Validation();
     $validator->add('email', new EmailValidator(['model' => $this, 'message' => 'Sorry, The email was registered by another user']));
     $validator->add('username', new UniquenessValidator(['model' => $this, 'message' => 'Sorry, That username is already taken']));
     return $this->validate($validator);
 }
コード例 #14
0
ファイル: Pet.php プロジェクト: sieg1980/pohome
 public function validation()
 {
     $validator = new Validation();
     $validator->add('name', new PetnameValidator());
     $validator->add('birthday', new DateValidator(['message' => '您填写的动物生日的格式有误']));
     return $this->validate($validator);
 }
コード例 #15
0
 /**
  * Executes the validation
  *
  * @param Phalcon\Validation $validator
  * @param string $attribute
  * @return boolean
  */
 public function validate(\Phalcon\Validation $validator, $attribute)
 {
     $flag = true;
     $reqType = $validator->getValue($attribute);
     // 待校验的文件集合
     $fileType = $this->getOption('filetype');
     // 合法的文件类型集合
     $errorCode = $this->getOption('code');
     foreach ($reqType as $file) {
         $extArr = explode('.', $file);
         $ext = array_pop($extArr);
         if (!in_array($ext, $fileType)) {
             $flag = false;
             break;
         }
     }
     if (!$flag) {
         $message = $this->getOption('message');
         if (!$message) {
             $message = 'The filetype is not valid';
         }
         $validator->appendMessage(new Message($message, $attribute, 'filetype'));
         return false;
     }
     return true;
 }
コード例 #16
0
ファイル: Existence.php プロジェクト: huxiaohe/api-framework
 public function validate(Validation $validation, $attribute)
 {
     $value = $validation->getValue($attribute);
     $model = $this->getOption('model');
     $except = $this->getOption("except");
     if (empty($model)) {
         throw new \Exception("Model must be set");
     }
     if (empty($attribute)) {
         throw new \Exception("arrtibute must be set");
     }
     if ($except) {
         $number = $model::count(sprintf($attribute . " = %s AND " . $attribute . " != %s", $value, $except));
     } else {
         $number = $model::count(sprintf($attribute . " = %s", $value));
     }
     if (!$number) {
         $message = $this->getOption('message');
         if (empty($message)) {
             $message = '字段对应的值不存在';
         }
         $validation->appendMessage(new Message($message, $attribute, "Existence"));
         return false;
     }
     return true;
 }
コード例 #17
0
 public function validation()
 {
     $validator = new Validation();
     $validator->add('login', new UniquenessValidator(["model" => $this, "message" => $this->getDi()->get('helper')->translate("The Login must be unique")]));
     $validator->add('email', new UniquenessValidator(["model" => $this, "message" => $this->getDi()->get('helper')->translate("The Email must be unique")]));
     return $this->validate($validator);
 }
コード例 #18
0
ファイル: LoginController.php プロジェクト: kimthangatm/zcms
 /**
  * Login Action
  */
 public function indexAction()
 {
     //User has login yet
     if ($this->_user) {
         $this->session->remove('auth');
         unset($_SESSION);
     }
     //Regular login
     if ($this->request->isPost()) {
         $validation = new Validation();
         $validation->add('email', new Email());
         $messages = $validation->validate($this->request->getPost());
         if (count($messages)) {
             foreach ($messages as $message) {
                 $this->flashSession->error($message);
             }
             return $this->response->redirect('/admin/user/login/');
         }
         $email = strtolower($this->request->getPost('email', 'email'));
         $password = $this->request->getPost('password', 'string');
         if (Users::login($email, $password)) {
             $this->response->redirect('/admin/');
         } else {
             $this->flashSession->error('m_user_message_login__user_or_password_do_not_match');
             return $this->response->redirect('/admin/user/login/');
         }
     }
     return null;
 }
コード例 #19
0
ファイル: LoginController.php プロジェクト: kimthangatm/zcms
 /**
  * User login
  */
 public function indexAction()
 {
     //User has login yet
     if ($this->_user) {
         $this->session->remove('auth');
         unset($_SESSION);
     }
     $this->_addSocialLogin();
     //Regular login
     if ($this->request->isPost()) {
         $validation = new Validation();
         $validation->add('email', new Email());
         $messages = $validation->validate($this->request->getPost());
         if (count($messages)) {
             foreach ($messages as $message) {
                 $this->flashSession->error($message);
             }
             $this->response->redirect('/user/login/');
             return;
         }
         $email = strtolower($this->request->getPost('email', 'email'));
         $password = $this->request->getPost('password', 'string');
         if (Users::login($email, $password)) {
             $user = Users::getCurrentUser();
             $this->flashSession->success('Hi, ' . $user['full_name']);
             $this->response->redirect('/');
         } else {
             $this->flashSession->error('User or password not match!');
             $this->response->redirect('/user/login/');
         }
     }
 }
コード例 #20
0
 /**
  * Get error messages
  *
  * @return array
  */
 public function getMessages()
 {
     $messages = [];
     foreach ($this->validation->getMessages() as $messageObject) {
         $messages[$messageObject->getField()][$messageObject->getType()] = $messageObject->getMessage();
     }
     return $messages;
 }
コード例 #21
0
ファイル: Password.php プロジェクト: al35mm/Phalcon-Rocket
 public function validate(\Phalcon\Validation $validation, $field)
 {
     $password = $validation->getValue($field);
     $error = FALSE;
     if (strlen($password) == 0) {
         $error = 'You must provide a password.';
     }
     $strength = 0;
     /*** get the length of the password ***/
     $length = strlen($password);
     /*** check if password is not all lower case ***/
     if (strtolower($password) != $password) {
         $strength += 1;
     }
     /*** check if password is not all upper case ***/
     if (strtoupper($password) != $password) {
         $strength += 1;
     }
     /*** check string length is 8 -15 chars ***/
     if ($length >= 8 && $length <= 15) {
         $strength += 1;
     }
     /*** check if lenth is 16 - 35 chars ***/
     if ($length >= 16 && $length <= 35) {
         $strength += 2;
     }
     /*** check if length greater than 35 chars ***/
     if ($length > 35) {
         $strength += 3;
     }
     /*** get the numbers in the password ***/
     preg_match_all('/[0-9]/', $password, $numbers);
     $strength += count($numbers[0]);
     /*** check for special chars ***/
     preg_match_all('/[|!@#$%&*\\/=?,;.:\\-_+~^\\\\]/', $password, $specialchars);
     $strength += sizeof($specialchars[0]);
     /*** get the number of unique chars ***/
     $chars = str_split($password);
     $num_unique_chars = sizeof(array_unique($chars));
     $strength += $num_unique_chars * 2;
     /*** strength is a number 1-10; ***/
     $strength = $strength > 99 ? 99 : $strength;
     $strength = floor($strength / 10 + 1);
     $min_strength = \Phalcon\DI::getDefault()->getShared('config')->auth->password_strength;
     if ($error || $strength < $min_strength) {
         $message = $this->getOption("message");
         if (empty($message)) {
             if ($error) {
                 $message = 'Please enter a passsword!';
             } else {
                 $message = 'Weak password! Try longer with mix of upper & lower case and numbers';
             }
         }
         $validation->appendMessage(new \Phalcon\Validation\Message($message, $field, "Password"));
         return false;
     }
     return TRUE;
 }
コード例 #22
0
 /**
  * Executes the validation
  *
  * @param mixed $validation
  * @param string $attribute
  * @return bool
  */
 public function validate(\Phalcon\Validation $validation, $attribute)
 {
     if (!$this->validateImei($validation->getValue($attribute))) {
         $this->addMessageToValidation($validation, 'Invalid :field supplied', $attribute, 'IMEINumber');
         return false;
     } else {
         return true;
     }
 }
コード例 #23
0
 public function validate(\Phalcon\Validation $validator, $attribute)
 {
     $value = $validator->getValue($attribute);
     if (isset($value['error']) and isset($value['name']) and isset($value['type']) and isset($value['tmp_name']) and isset($value['size'])) {
         return true;
     }
     $validator->appendMessage(new Message('Некорректный файл.', $attribute, 'upload_valid'));
     return false;
 }
コード例 #24
0
ファイル: ValidationCest.php プロジェクト: phalcon/cphalcon
 /**
  * Tests the get
  *
  * @issue  10405
  * @author Serghei Iakovlev <*****@*****.**>
  * @since  2016-06-27
  * @param IntegrationTester $I
  */
 public function appendValidationMessageToTheNonObject(IntegrationTester $I)
 {
     $myValidator = new PresenceOf();
     $validation = new Validation();
     $validation->bind(new \stdClass(), ['day' => date('d'), 'month' => date('m'), 'year' => date('Y') + 1]);
     $myValidator->validate($validation, 'foo');
     $expectedMessages = Group::__set_state(['_position' => 0, '_messages' => [new Message('Field foo is required', 'foo', 'PresenceOf', 0)]]);
     $I->assertEquals($expectedMessages, $validation->getMessages());
 }
コード例 #25
0
ファイル: DigitTest.php プロジェクト: phalcon/cphalcon
 public function testShouldValidateIntOrStringOfDigits()
 {
     $this->specify('The Digit Validator does not validate digits correctly', function ($digit) {
         $validation = new Validation();
         $validation->add('amount', new Digit());
         $messages = $validation->validate(['amount' => $digit]);
         expect($messages)->count(0);
     }, ['examples' => [['123'], [123], [PHP_INT_MAX], [0xffffff], [100000], [-100000], [0], ["0"], ["00001233422003400"]]]);
 }
コード例 #26
0
ファイル: Auth.php プロジェクト: xsat/www.test.com
 public function validate(\Phalcon\Validation $validator, $attribute)
 {
     $user = new \Models\User();
     if (!$user->isAuth($validator->getValue('login'), $validator->getValue($attribute))) {
         $validator->appendMessage(new \Phalcon\Validation\Message($this->getOption('message'), $attribute));
         return false;
     }
     return true;
 }
コード例 #27
0
ファイル: Petname.php プロジェクト: sieg1980/pohome
 public function validate(Validation $validator, $attribute)
 {
     $value = $validator->getValue($attribute);
     if (preg_match('/^[a-zA-Z\\x{4e00}-\\x{9fa5}][a-zA-Z\\x{4e00}-\\x{9fa5}_ ]{1,19}$/u', $value) == 0) {
         $validator->appendMessage(new Message('您填写的动物名格式有误,动物名只能包含2-20个英文大小写字母、汉字、数字、下划线和空格,且不能以数字、下划线和空格开头', $attribute));
         return false;
     }
     return true;
 }
コード例 #28
0
ファイル: Callback.php プロジェクト: tomi20v/phalswag
 /**
  * @see \Phalcon\Validation\Validator::validate
  * @param Validation $validator
  * @param $attribute
  * @return bool
  */
 public function validate(Validation $validator, $attribute)
 {
     $value = $validator->getValue($attribute);
     $result = call_user_func($this->_options['callback'], $value);
     if (!$result) {
         $message = isset($this->_options['message']) ? $this->_options['message'] : 'validation failed';
         $validator->appendMessage(new Message($message, $attribute, 'callback'));
     }
     return $result ? true : false;
 }
コード例 #29
0
 public function validate(\Phalcon\Validation $validator, $attribute)
 {
     $value = $validator->getValue($attribute);
     if ((bool) getimagesize($value['tmp_name'])) {
         return true;
     } else {
         $validator->appendMessage(new Message('Файл не является изображением. Для загрузки разрешены только изображения.', $attribute, 'upload_image'));
         return false;
     }
 }
コード例 #30
0
ファイル: IntegerValidator.php プロジェクト: karawan/core
 /**
  * Executes Integer validation
  *
  * @param \Phalcon\Validation $validator
  * @param string $attribute
  * @return boolean
  */
 public function validate(\Phalcon\Validation $validator, $attribute)
 {
     $value = $validator->getValue($attribute);
     $msg = $this->getOption('message');
     if (ctype_digit(strval($value)) == false) {
         $validator->appendMessage(new Message($msg, $attribute, 'IntegerValidator'));
         return false;
     }
     return true;
 }