src/Abstracts/aFieldModel.php
protected function modelIndividualValue_CheckValue($v) : array
    {
        $canSet = true;
        $state  = "valid";

        
        // Tratando-se de um objeto "iModel" do mesmo tipo, aceita-o 
        // sempre, mesmo que ele próprio esteja inválido.
        if ($this->modelName !== null && $this->checkIfValueIsModelOf($v, $this->modelName) === true) {
            return [
                "canSet"    => true,
                "valid"     => $v->isValid(),
                "state"     => $v->getState(),
                "cState"    => null
            ];
        } else {

            // Primeira validação é a de possibilidade de
            // redefinir o valor do campo.
            if ($this->isReadOnly() === true && $this->value !== undefined) {
                $canSet = false;
                $state  = "error.dm.field.value.constraint.read.only";
            }


            if ($canSet === true) {
                if ($v === undefined) { 
                    $canSet = false;
                    $state  = "error.dm.field.value.not.allow.undefined";
                } elseif ($v === null) {
                    if ($this->isAllowNull() === false) {
                        $canSet = false;
                        $state = "error.dm.field.value.not.allow.null";
                    }
                } elseif ($v === "") {
                    $canSet = false;
                    $state = "error.dm.field.value.not.allow.empty";
                } else {
                    if ($this->modelValidate === null) {
                        $this->modelValidate = $this->modelFactory->createDataModel($this->modelName);
                    }

                    $this->modelValidate->validateValues($v);
                    $state  = $this->modelValidate->getLastValidateState();
                    $canSet = $this->modelValidate->getLastValidateCanSet();
                }
            }

            return [
                "canSet"    => $canSet,
                "valid"     => ($state === "valid"),
                "state"     => $state,
                "cState"    => null
            ];
        }
    }
protected function modelIndividualValue_CheckValue($v) : array
    {
        $canSet = true;
        $state  = "valid";

        
        // Tratando-se de um objeto "iModel" do mesmo tipo, aceita-o 
        // sempre, mesmo que ele próprio esteja inválido.
        if ($this->modelName !== null && $this->checkIfValueIsModelOf($v, $this->modelName) === true) {
            return [
                "canSet"    => true,
                "valid"     => $v->isValid(),
                "state"     => $v->getState(),
                "cState"    => null
            ];
        } else {

            // Primeira validação é a de possibilidade de
            // redefinir o valor do campo.
            if ($this->isReadOnly() === true && $this->value !== undefined) {
                $canSet = false;
                $state  = "error.dm.field.value.constraint.read.only";
            }


            if ($canSet === true) {
                if ($v === undefined) { 
                    $canSet = false;
                    $state  = "error.dm.field.value.not.allow.undefined";
                } elseif ($v === null) {
                    if ($this->isAllowNull() === false) {
                        $canSet = false;
                        $state = "error.dm.field.value.not.allow.null";
                    }
                } elseif ($v === "") {
                    $canSet = false;
                    $state = "error.dm.field.value.not.allow.empty";
                } else {
                    if ($this->modelValidate === null) {
                        $this->modelValidate = $this->modelFactory->createDataModel($this->modelName);
                    }

                    $this->modelValidate->validateValues($v);
                    $state  = $this->modelValidate->getLastValidateState();
                    $canSet = $this->modelValidate->getLastValidateCanSet();
                }
            }

            return [
                "canSet"    => $canSet,
                "valid"     => ($state === "valid"),
                "state"     => $state,
                "cState"    => null
            ];
        }
    }
Verifica um valor de forma individual e retorna um array
com informações sobre sua validação.

@param       mixed $v
Valor que será testado.

@return      array

$arr = [
"canSet"    bool            Indica se o valor pode ou não ser definido para o campo.
"valid"     bool            Indica se o valor pode ser aceito por este campo.
"state"     string          Código do estado da validação.
"cState"    null            Código do estado da coleção validada.
]