CakePHP
  • Documentation
    • Book
    • API
    • Videos
    • Reporting Security Issues
    • Privacy Policy
    • Logos & Trademarks
  • Business Solutions
  • Swag
  • Road Trip
  • Team
  • Community
    • Community
    • Get Involved
    • Issues (GitHub)
    • Bakery
    • Featured Resources
    • Training
    • Meetups
    • My CakePHP
    • CakeFest
    • Newsletter
    • Linkedin
    • YouTube
    • Facebook
    • Twitter
    • Mastodon
    • Help & Support
    • Forum
    • Stack Overflow
    • Slack
    • Paid Support
CakePHP

C CakePHP 2.6 API

  • Overview
  • Tree
  • Deprecated
  • Version:
    • 2.6
      • 4.2
      • 4.1
      • 4.0
      • 3.9
      • 3.8
      • 3.7
      • 3.6
      • 3.5
      • 3.4
      • 3.3
      • 3.2
      • 3.1
      • 3.0
      • 2.10
      • 2.9
      • 2.8
      • 2.7
      • 2.6
      • 2.5
      • 2.4
      • 2.3
      • 2.2
      • 2.1
      • 2.0
      • 1.3
      • 1.2

Packages

  • Cake
    • Cache
      • Engine
    • Configure
    • Console
      • Command
        • Task
    • Controller
      • Component
        • Acl
        • Auth
    • Core
    • Error
    • Event
    • I18n
    • Log
      • Engine
    • Model
      • Behavior
      • Datasource
        • Database
        • Session
      • Validator
    • Network
      • Email
      • Http
    • Routing
      • Filter
      • Route
    • TestSuite
      • Coverage
      • Fixture
      • Reporter
    • Utility
    • View
      • Helper

Classes

  • CakeValidationRule
  • CakeValidationSet
  1: <?php
  2: /**
  3:  * CakeValidationRule.
  4:  *
  5:  * Provides the Model validation logic.
  6:  *
  7:  * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
  8:  * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
  9:  *
 10:  * Licensed under The MIT License
 11:  * For full copyright and license information, please see the LICENSE.txt
 12:  * Redistributions of files must retain the above copyright notice.
 13:  *
 14:  * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 15:  * @link          http://cakephp.org CakePHP(tm) Project
 16:  * @package       Cake.Model.Validator
 17:  * @since         CakePHP(tm) v 2.2.0
 18:  * @license       http://www.opensource.org/licenses/mit-license.php MIT License
 19:  */
 20: 
 21: App::uses('Validation', 'Utility');
 22: 
 23: /**
 24:  * CakeValidationRule object. Represents a validation method, error message and
 25:  * rules for applying such method to a field.
 26:  *
 27:  * @package       Cake.Model.Validator
 28:  * @link          http://book.cakephp.org/2.0/en/data-validation.html
 29:  */
 30: class CakeValidationRule {
 31: 
 32: /**
 33:  * Whether the field passed this validation rule
 34:  *
 35:  * @var mixed
 36:  */
 37:     protected $_valid = true;
 38: 
 39: /**
 40:  * Holds whether the record being validated exists in datasource or not
 41:  *
 42:  * @var bool
 43:  */
 44:     protected $_recordExists = false;
 45: 
 46: /**
 47:  * Validation method
 48:  *
 49:  * @var mixed
 50:  */
 51:     protected $_rule = null;
 52: 
 53: /**
 54:  * Validation method arguments
 55:  *
 56:  * @var array
 57:  */
 58:     protected $_ruleParams = array();
 59: 
 60: /**
 61:  * Holds passed in options
 62:  *
 63:  * @var array
 64:  */
 65:     protected $_passedOptions = array();
 66: 
 67: /**
 68:  * The 'rule' key
 69:  *
 70:  * @var mixed
 71:  */
 72:     public $rule = 'blank';
 73: 
 74: /**
 75:  * The 'required' key
 76:  *
 77:  * @var mixed
 78:  */
 79:     public $required = null;
 80: 
 81: /**
 82:  * The 'allowEmpty' key
 83:  *
 84:  * @var bool
 85:  */
 86:     public $allowEmpty = null;
 87: 
 88: /**
 89:  * The 'on' key
 90:  *
 91:  * @var string
 92:  */
 93:     public $on = null;
 94: 
 95: /**
 96:  * The 'last' key
 97:  *
 98:  * @var bool
 99:  */
100:     public $last = true;
101: 
102: /**
103:  * The 'message' key
104:  *
105:  * @var string
106:  */
107:     public $message = null;
108: 
109: /**
110:  * Constructor
111:  *
112:  * @param array $validator [optional] The validator properties
113:  */
114:     public function __construct($validator = array()) {
115:         $this->_addValidatorProps($validator);
116:     }
117: 
118: /**
119:  * Checks if the rule is valid
120:  *
121:  * @return bool
122:  */
123:     public function isValid() {
124:         if (!$this->_valid || (is_string($this->_valid) && !empty($this->_valid))) {
125:             return false;
126:         }
127: 
128:         return true;
129:     }
130: 
131: /**
132:  * Returns whether the field can be left blank according to this rule
133:  *
134:  * @return bool
135:  */
136:     public function isEmptyAllowed() {
137:         return $this->skip() || $this->allowEmpty === true;
138:     }
139: 
140: /**
141:  * Checks if the field is required according to the `required` property
142:  *
143:  * @return bool
144:  */
145:     public function isRequired() {
146:         if (in_array($this->required, array('create', 'update'), true)) {
147:             if ($this->required === 'create' && !$this->isUpdate() || $this->required === 'update' && $this->isUpdate()) {
148:                 return true;
149:             }
150:             return false;
151:         }
152: 
153:         return $this->required;
154:     }
155: 
156: /**
157:  * Checks whether the field failed the `field should be present` validation
158:  *
159:  * @param string $field Field name
160:  * @param array &$data Data to check rule against
161:  * @return bool
162:  */
163:     public function checkRequired($field, &$data) {
164:         return (
165:             (!array_key_exists($field, $data) && $this->isRequired() === true) ||
166:             (
167:                 array_key_exists($field, $data) && (empty($data[$field]) &&
168:                 !is_numeric($data[$field])) && $this->allowEmpty === false
169:             )
170:         );
171:     }
172: 
173: /**
174:  * Checks if the allowEmpty key applies
175:  *
176:  * @param string $field Field name
177:  * @param array &$data data to check rule against
178:  * @return bool
179:  */
180:     public function checkEmpty($field, &$data) {
181:         if (empty($data[$field]) && $data[$field] != '0' && $this->allowEmpty === true) {
182:             return true;
183:         }
184:         return false;
185:     }
186: 
187: /**
188:  * Checks if the validation rule should be skipped
189:  *
190:  * @return bool True if the ValidationRule can be skipped
191:  */
192:     public function skip() {
193:         if (!empty($this->on)) {
194:             if ($this->on === 'create' && $this->isUpdate() || $this->on === 'update' && !$this->isUpdate()) {
195:                 return true;
196:             }
197:         }
198:         return false;
199:     }
200: 
201: /**
202:  * Returns whether this rule should break validation process for associated field
203:  * after it fails
204:  *
205:  * @return bool
206:  */
207:     public function isLast() {
208:         return (bool)$this->last;
209:     }
210: 
211: /**
212:  * Gets the validation error message
213:  *
214:  * @return string
215:  */
216:     public function getValidationResult() {
217:         return $this->_valid;
218:     }
219: 
220: /**
221:  * Gets an array with the rule properties
222:  *
223:  * @return array
224:  */
225:     protected function _getPropertiesArray() {
226:         $rule = $this->rule;
227:         if (!is_string($rule)) {
228:             unset($rule[0]);
229:         }
230:         return array(
231:             'rule' => $rule,
232:             'required' => $this->required,
233:             'allowEmpty' => $this->allowEmpty,
234:             'on' => $this->on,
235:             'last' => $this->last,
236:             'message' => $this->message
237:         );
238:     }
239: 
240: /**
241:  * Sets the recordExists configuration value for this rule,
242:  * ir refers to whether the model record it is validating exists
243:  * exists in the collection or not (create or update operation)
244:  *
245:  * If called with no parameters it will return whether this rule
246:  * is configured for update operations or not.
247:  *
248:  * @param bool $exists Boolean to indicate if records exists
249:  * @return bool
250:  */
251:     public function isUpdate($exists = null) {
252:         if ($exists === null) {
253:             return $this->_recordExists;
254:         }
255:         return $this->_recordExists = $exists;
256:     }
257: 
258: /**
259:  * Dispatches the validation rule to the given validator method
260:  *
261:  * @param string $field Field name
262:  * @param array &$data Data array
263:  * @param array &$methods Methods list
264:  * @return bool True if the rule could be dispatched, false otherwise
265:  */
266:     public function process($field, &$data, &$methods) {
267:         $this->_valid = true;
268:         $this->_parseRule($field, $data);
269: 
270:         $validator = $this->_getPropertiesArray();
271:         $rule = strtolower($this->_rule);
272:         if (isset($methods[$rule])) {
273:             $this->_ruleParams[] = array_merge($validator, $this->_passedOptions);
274:             $this->_ruleParams[0] = array($field => $this->_ruleParams[0]);
275:             $this->_valid = call_user_func_array($methods[$rule], $this->_ruleParams);
276:         } elseif (class_exists('Validation') && method_exists('Validation', $this->_rule)) {
277:             $this->_valid = call_user_func_array(array('Validation', $this->_rule), $this->_ruleParams);
278:         } elseif (is_string($validator['rule'])) {
279:             $this->_valid = preg_match($this->_rule, $data[$field]);
280:         } else {
281:             trigger_error(__d('cake_dev', 'Could not find validation handler %s for %s', $this->_rule, $field), E_USER_WARNING);
282:             return false;
283:         }
284: 
285:         return true;
286:     }
287: 
288: /**
289:  * Resets internal state for this rule, by default it will become valid
290:  * and it will set isUpdate() to false
291:  *
292:  * @return void
293:  */
294:     public function reset() {
295:         $this->_valid = true;
296:         $this->_recordExists = false;
297:     }
298: 
299: /**
300:  * Returns passed options for this rule
301:  *
302:  * @param string|int $key Array index
303:  * @return array|null
304:  */
305:     public function getOptions($key) {
306:         if (!isset($this->_passedOptions[$key])) {
307:             return null;
308:         }
309:         return $this->_passedOptions[$key];
310:     }
311: 
312: /**
313:  * Sets the rule properties from the rule entry in validate
314:  *
315:  * @param array $validator [optional]
316:  * @return void
317:  */
318:     protected function _addValidatorProps($validator = array()) {
319:         if (!is_array($validator)) {
320:             $validator = array('rule' => $validator);
321:         }
322:         foreach ($validator as $key => $value) {
323:             if (isset($value) || !empty($value)) {
324:                 if (in_array($key, array('rule', 'required', 'allowEmpty', 'on', 'message', 'last'))) {
325:                     $this->{$key} = $validator[$key];
326:                 } else {
327:                     $this->_passedOptions[$key] = $value;
328:                 }
329:             }
330:         }
331:     }
332: 
333: /**
334:  * Parses the rule and sets the rule and ruleParams
335:  *
336:  * @param string $field Field name
337:  * @param array &$data Data array
338:  * @return void
339:  */
340:     protected function _parseRule($field, &$data) {
341:         if (is_array($this->rule)) {
342:             $this->_rule = $this->rule[0];
343:             $this->_ruleParams = array_merge(array($data[$field]), array_values(array_slice($this->rule, 1)));
344:         } else {
345:             $this->_rule = $this->rule;
346:             $this->_ruleParams = array($data[$field]);
347:         }
348:     }
349: 
350: }
351: 
OpenHub
Rackspace
Rackspace
  • Business Solutions
  • Showcase
  • Documentation
  • Book
  • API
  • Videos
  • Reporting Security Issues
  • Privacy Policy
  • Logos & Trademarks
  • Community
  • Get Involved
  • Issues (GitHub)
  • Bakery
  • Featured Resources
  • Training
  • Meetups
  • My CakePHP
  • CakeFest
  • Newsletter
  • Linkedin
  • YouTube
  • Facebook
  • Twitter
  • Mastodon
  • Help & Support
  • Forum
  • Stack Overflow
  • Slack
  • Paid Support

Generated using CakePHP API Docs