From 84fe201dd1be838f6ca8c90e7be461443472f1ee Mon Sep 17 00:00:00 2001 From: kamrava Date: Mon, 20 Mar 2017 13:54:46 +0330 Subject: [PATCH 1/2] Laravel54 --- src/Javascript/MessageParser.php | 2 +- src/JsValidatorFactory.php | 5 +++-- src/Remote/Validator.php | 7 ++++--- src/Support/DelegatedValidator.php | 17 +++++++++++++---- src/Support/ValidationRuleParserProxy.php | 19 +++++++++++++++++++ tests/Remote/ResolverTest.php | 2 +- 6 files changed, 41 insertions(+), 11 deletions(-) create mode 100644 src/Support/ValidationRuleParserProxy.php diff --git a/src/Javascript/MessageParser.php b/src/Javascript/MessageParser.php index cb5c1c53..5bab9102 100644 --- a/src/Javascript/MessageParser.php +++ b/src/Javascript/MessageParser.php @@ -34,7 +34,7 @@ public function getMessage($attribute, $rule, $parameters) $data = $this->fakeValidationData($attribute, $rule, $parameters); $message = $this->validator->getMessage($attribute, $rule); - $message = $this->validator->doReplacements($message, $attribute, $rule, $parameters); + $message = $this->validator->makeReplacements($message, $attribute, $rule, $parameters); $this->validator->setData($data); diff --git a/src/JsValidatorFactory.php b/src/JsValidatorFactory.php index 7d44e1f2..8cab41c7 100644 --- a/src/JsValidatorFactory.php +++ b/src/JsValidatorFactory.php @@ -10,6 +10,7 @@ use Proengsoft\JsValidation\Support\DelegatedValidator; use Proengsoft\JsValidation\Javascript\ValidatorHandler; use Proengsoft\JsValidation\Javascript\JavascriptValidator; +use Proengsoft\JsValidation\Support\ValidationRuleParserProxy; class JsValidatorFactory { @@ -157,7 +158,7 @@ protected function createFormRequest($class) $formRequest = $this->app->build($class, $params); if ($session = $request->getSession()) { - $formRequest->setSession($session); + $formRequest->setLaravelSession($session); } $formRequest->setUserResolver($request->getUserResolver()); $formRequest->setRouteResolver($request->getRouteResolver()); @@ -194,7 +195,7 @@ protected function jsValidator(Validator $validator, $selector = null) $view = $this->options['view']; $selector = is_null($selector) ? $this->options['form_selector'] : $selector; - $delegated = new DelegatedValidator($validator); + $delegated = new DelegatedValidator($validator, new ValidationRuleParserProxy()); $rules = new RuleParser($delegated, $this->getSessionToken()); $messages = new MessageParser($delegated); diff --git a/src/Remote/Validator.php b/src/Remote/Validator.php index 537163c8..6be1901f 100644 --- a/src/Remote/Validator.php +++ b/src/Remote/Validator.php @@ -3,8 +3,9 @@ namespace Proengsoft\JsValidation\Remote; use Illuminate\Http\JsonResponse; +use Illuminate\Validation\ValidationRuleParser; use Proengsoft\JsValidation\Support\RuleListTrait; -use Illuminate\Http\Exception\HttpResponseException; +use Illuminate\Http\Exceptions\HttpResponseException; use Illuminate\Validation\Validator as BaseValidator; use Proengsoft\JsValidation\Support\AccessProtectedTrait; @@ -57,7 +58,7 @@ public function validate($field, $parameters = []) * @param \Illuminate\Validation\Validator $validator * @return void * - * @throws \Illuminate\Validation\ValidationException|\Illuminate\Http\Exception\HttpResponseException + * @throws \Illuminate\Validation\ValidationException|\Illuminate\Http\Exceptions\HttpResponseException */ protected function throwValidationException($result, $validator) { @@ -153,7 +154,7 @@ protected function purgeNonRemoteRules($rules, $validator) $protectedValidator = $this->createProtectedCaller($validator); foreach ($rules as $i => $rule) { - $parsedRule = call_user_func($protectedValidator, 'parseRule', [$rule]); + $parsedRule = ValidationRuleParser::parse([$rule]); if (! $this->isRemoteRule($parsedRule[0])) { unset($rules[$i]); } diff --git a/src/Support/DelegatedValidator.php b/src/Support/DelegatedValidator.php index 1fa260e8..17fb2fb2 100644 --- a/src/Support/DelegatedValidator.php +++ b/src/Support/DelegatedValidator.php @@ -15,6 +15,13 @@ class DelegatedValidator */ protected $validator; + /** + * Validation rule parser instance. + * + * @var \Proengsoft\JsValidation\Support\ValidationRuleParserProxy + */ + protected $ruleParser; + /** * Closure to invoke non accessible Validator methods. * @@ -26,10 +33,12 @@ class DelegatedValidator * DelegatedValidator constructor. * * @param \Illuminate\Validation\Validator $validator + * @param \Proengsoft\JsValidation\Support\ValidationRuleParserProxy $ruleParser */ - public function __construct(BaseValidator $validator) + public function __construct(BaseValidator $validator, ValidationRuleParserProxy $ruleParser) { $this->validator = $validator; + $this->ruleParser = $ruleParser; $this->validatorMethod = $this->createProtectedCaller($validator); } @@ -107,9 +116,9 @@ public function isImplicit($rule) * * @return string */ - public function doReplacements($message, $attribute, $rule, $parameters) + public function makeReplacements($message, $attribute, $rule, $parameters) { - return $this->callValidator('doReplacements', [$message, $attribute, $rule, $parameters]); + return $this->callValidator('makeReplacements', [$message, $attribute, $rule, $parameters]); } /** @@ -147,7 +156,7 @@ public function getMessage($attribute, $rule) */ public function parseRule($rules) { - return $this->callValidator('parseRule', [$rules]); + return $this->ruleParser->parse($rules); } /** diff --git a/src/Support/ValidationRuleParserProxy.php b/src/Support/ValidationRuleParserProxy.php new file mode 100644 index 00000000..fe86f7a6 --- /dev/null +++ b/src/Support/ValidationRuleParserProxy.php @@ -0,0 +1,19 @@ + Date: Wed, 10 May 2017 18:30:54 +0430 Subject: [PATCH 2/2] Path for Laravel 5.4.19 and newer --- src/JsValidatorFactory.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/JsValidatorFactory.php b/src/JsValidatorFactory.php index 8cab41c7..2ff8587f 100644 --- a/src/JsValidatorFactory.php +++ b/src/JsValidatorFactory.php @@ -155,7 +155,7 @@ protected function createFormRequest($class) list($class, $params) = $this->parseFormRequestName($class); $request = $this->app->__get('request'); - $formRequest = $this->app->build($class, $params); + $formRequest = new $class; if ($session = $request->getSession()) { $formRequest->setLaravelSession($session);