From c67ca3fd87e1e39bb004a89d94e9b1074fd14d43 Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Fri, 15 Apr 2022 17:50:50 +0200 Subject: [PATCH] MVC - Phalcon 5 migration and options to lose dependency of phalcon validation classes. part duex Although our previous strategy should work according to how bind() and validation() are being implemented (https://github.com/phalcon/cphalcon/blob/4.2.x/phalcon/Validation.zep), in reality it seems they aren't the same. Our previous attempt failed some validations (such as booleans) for no valid reasons. Long term we should remove the phalcon dependency as these effects are highly unpredictable. --- .../app/models/OPNsense/Base/Validation.php | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/Validation.php b/src/opnsense/mvc/app/models/OPNsense/Base/Validation.php index 70b64449aea..022dec20755 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Base/Validation.php +++ b/src/opnsense/mvc/app/models/OPNsense/Base/Validation.php @@ -36,6 +36,7 @@ class Validation public function __construct($validators = []) { $this->validators = $validators; + $this->phalcon_validation = new \Phalcon\Validation(); } /** @@ -58,10 +59,14 @@ public function appendMessage($message) */ public function add($key, $validator) { - if (empty($this->validators[$key])){ - $this->validators[$key] = []; + if (is_a($validator, "OPNsense\Base\BaseValidator")) { + if (empty($this->validators[$key])){ + $this->validators[$key] = []; + } + $this->validators[$key][] = $validator; + } else { + $this->phalcon_validation->add($key, $validator); } - $this->validators[$key][] = $validator; return $this; } @@ -73,22 +78,15 @@ public function add($key, $validator) public function validate($data) { $this->data = $data; - // XXX: version check - $validation = new \Phalcon\Validation(); - $validation->bind($this, $data); - foreach ($data as $key => $value) { if (!empty($this->validators[$key])) { foreach ($this->validators[$key] as $validator) { - if (is_a($validator, "OPNsense\Base\BaseValidator")) { - $validator->validate($this, $key); - } else { - $validator->validate($validation, $key); - } + $validator->validate($this, $key); } } } - $phalconMsgs = $validation->getMessages(); + // XXX: temporary dual validation + $phalconMsgs = $this->phalcon_validation->validate($data); if (!empty($phalconMsgs)) { foreach ($phalconMsgs as $phalconMsg) { $this->messages[] = $phalconMsg;