From 7a67a2c03d07559c929d817aea28b7abd1edf8d0 Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Mon, 8 Aug 2016 10:47:40 +0200 Subject: [PATCH] (mvc) some refactoring for https://github.com/opnsense/core/pull/1124 --- .../OPNsense/Base/ApiModelControllerBase.php | 61 +++++++++++++++++-- .../Base/ApiMutableModelControllerBase.php | 11 +++- 2 files changed, 63 insertions(+), 9 deletions(-) diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Base/ApiModelControllerBase.php b/src/opnsense/mvc/app/controllers/OPNsense/Base/ApiModelControllerBase.php index 62c461cae..a349ecd9a 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Base/ApiModelControllerBase.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/Base/ApiModelControllerBase.php @@ -1,6 +1,7 @@ internalModelClass)) { + throw new \Exception('cannot instantiate without internalModelClass defined.'); + } + if (empty($this->internalModelName)) { + throw new \Exception('cannot instantiate without internalModelName defined.'); + } + } + + /** + * retrieve model settings + * @return array settings + */ public function getAction() { // define list of configurable settings $result = array(); if ($this->request->isGet()) { $mdl = $this->getModel(); - $result[$this->getModelName()] = $this->getModelNodes($mdl); + $result[$this->internalModelName] = $this->getModelNodes(); } return $result; } - abstract protected function getModel(); - abstract protected function getModelName(); + /** * override this to customize what part of the model gets exposed + * @return array */ - protected function getModelNodes($mdl) { - return $mdl->getNodes(); + protected function getModelNodes() + { + return $this->getModel()->getNodes(); + } + + /** + * override this to customize the model binding behavior + * @return null|BaseModel + */ + protected function getModel() + { + if ($this->modelHandle == null) { + $this->modelHandle = (new \ReflectionClass($this->internalModelClass))->newInstance(); + } + + return $this->modelHandle; } } diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Base/ApiMutableModelControllerBase.php b/src/opnsense/mvc/app/controllers/OPNsense/Base/ApiMutableModelControllerBase.php index 5a17f0031..412116904 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Base/ApiMutableModelControllerBase.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/Base/ApiMutableModelControllerBase.php @@ -1,6 +1,7 @@ "failed"); if ($this->request->isPost()) { // load model and update with provided data $mdl = $this->getModel(); - $mdl->setNodes($this->request->getPost(getModelName())); + $mdl->setNodes($this->request->getPost($this->internalModelName)); // perform validation $valMsgs = $mdl->performValidation(); @@ -54,7 +59,7 @@ abstract class ApiMutableModelControllerBase extends ApiModelControllerBase if (!array_key_exists("validations", $result)) { $result["validations"] = array(); } - $result["validations"][$this->getModelName().".".$msg->getField()] = $msg->getMessage(); + $result["validations"][$this->internalModelName.".".$msg->getField()] = $msg->getMessage(); } // serialize model to config and save