/** * validate form array values by model object * @param array $aForm * @param object $oModel a redbean model * @return boolean true for validate ok, false otherwise */ public function validateFormByModel(&$aForm, &$oModel) { try { $bValid = $oModel->isValid(); } catch (Exception $e) { $this->addMessage("Exception validating form: " . $e->getMessage(), "error"); return false; } if (!$bValid) { $bFoundInvalid = false; $aErrorStack = $oModel->getErrorStack(); //var_dump($oModel->getErrorStack()); $iCnt = 0; //var_dump($aErrorStack->toArray()); foreach ($aErrorStack as $sKey => $aError) { $sTargetField = $oModel->getTable()->getTableName() . "." . $sKey; //$this->addMessage("Field " . $sKey . ": " . implode(",", $aError), "error"); foreach ($aForm as $sFieldKey => &$mFieldValue) { if ($sFieldKey[0] != "#") { //if not #dbfield, skip to next sfieldkey if (!isset($mFieldValue["#dbfield"])) { continue; } $sField = $mFieldValue["#dbfield"]; $sTable = ""; if (strpos($sField, ".") !== false) { $aField = explode(".", $sField); $sTable = $aField[0]; $sField = $aField[1]; $sTableField = $sTable . "." . $sField; } else { //form doesnt contain table, therefore void table name $sTargetField = $sKey; $sTableField = $sField; } //echo "finding: " . $sTableField . ", loop: " . $sTargetField . "\r\n<br/>"; if ($sTableField == $sTargetField) { $sError = ""; foreach ($aError as $sErrorType) { //echo "errotype: " . $sErrorType; switch ($sErrorType) { case "length": $sError .= "Field length: " . strlen($mFieldValue["#value"]) . " exceed maximum length: " . $mFieldValue["#maxlength"]; $bFoundInvalid = true; break; default: $sError .= FlexiModelUtil::getErrorStackLabel($sErrorType) . "\r\n<br/>"; $bFoundInvalid = true; } } $mFieldValue["#notice"] = array("msg" => $sError); break; } } } } if ($bFoundInvalid) { return false; } } FlexiLogger::debug(__METHOD__, "is valid"); return true; }