/** * Returns only specified items * * @param array $keys Keys which to return from array * @param bool $respectKeyOrder If you want the resulting array to be ordered * precisely as $keys. Especially useful in list() construct * @param bool $requireAllKeys Require all keys from $keys to be present in the result. Throw exception otherwise * * @return array * @throws Exception */ public function getOnly(array $keys, $respectKeyOrder = false, $requireAllKeys = true) { $this->assertArrayDataExists(); $result = $respectKeyOrder ? Arr::onlyRespectOrder($this->data, $keys) : Arr::only($this->data, $keys); if ($requireAllKeys) { $this->assertAllDataPresent($keys, $result); } return $result; }
/** * Public validation function to validate some object * * @param mixed $object Object to validate * * @return bool */ public function isThisValid($object = null) { $objectData = $this->getObjectData($object); $this->lastState = $this->getState($object); $rules = Arr::mergeByCondition($this->rules, $this->lastState); $ruleParser = new RuleParser(); $rules = $ruleParser->parse($rules, $this->templateReplacements); $rules = $this->preProcessRules($rules, $objectData); //Registering custom validation rules foreach ($this->customRules as $ruleName => $customRuleData) { ValidationRuleRegistry::registerClosure($customRuleData[0], $customRuleData[1]); } //Creating validator $validatorFactory = new ValidatorFactory($this->validatorFactory); $validator = $validatorFactory->create($rules, $objectData); $validator->setCustomMessages($this->preProcessValidationErrorMessages($this->customValidationMessages, $rules, $objectData)); $this->setupValidator($validator); $method_name = 'setupValidatorFor' . Str::studly($this->lastState); if (method_exists($this, $method_name)) { $this->{$method_name}($validator); } $this->validationPassed = !$validator->fails(); if ($this->validationPassed) { $this->dataStorage = new ArrayDataStorage($this->keyCase); $this->dataStorage->setItems(Arr::only($objectData, array_keys($rules))); $this->failedMessages = new MessageBag(); $this->failedRules = []; } else { $this->failedMessages = $validator->getMessageBag(); $this->failedRules = $validator->failed(); $this->dataStorage = null; } return $this->validationPassed; }