validation - strategy - La validación del modelo CakePHP con matriz
save many cakephp 3 (1)
Teniendo en cuenta que se trata de datos, debe almacenar la lista de opciones válidas en el modelo.
class MyModel extends AppModel {
var $fieldAbcChoices = array(''a'' => ''The A'', ''b'' => ''The B'', ''c'' => ''The C'');
}
Puedes obtener esa variable en el controlador simplemente así:
$this->set(''fieldAbcs'', $this->MyModel->fieldAbcChoices);
Desafortunadamente, no se puede usar simplemente esa variable en la declaración de regla para la regla inList
, ya que las reglas se declaran como variables de instancia y solo se pueden inicializar de forma estática (no se permiten variables). La mejor forma de hacerlo es establecer la variable en el Constructor:
var $validate = array(
''fieldAbc'' => array(
''allowedChoice'' => array(
''rule'' => array(''inList'', array()),
''message'' => ''Enter something in listToCheck.''
)
)
);
function __construct($id = false, $table = null, $ds = null) {
parent::__construct($id, $table, $ds);
$this->validate[''fieldAbc''][''allowedChoice''][''rule''][1] = array_keys($this->fieldAbcChoices);
}
Si no se siente cómodo anulando el Constructor, también puede hacerlo en una devolución de llamada beforeValidate()
.
También tenga en cuenta que no debe nombrar su campo ''selectBox''. :)
Quiero usar la validación central de CakePHP para listas en mi modelo:
var $validate = array(
''selectBox'' => array(
''allowedChoice'' => array(
''rule'' => array(''inList'', $listToCheck),
''message'' => ''Enter something in listToCheck.''
)
)
);
Sin embargo, la matriz $listToCheck
es la misma matriz que se utiliza en la vista, para completar un cuadro de selección. ¿Dónde pongo esta función?
public function getList() {
return array(''hi''=>''Hello'',''bi''=>''Goodbye'',''si''=>''Salutations'');
}
Ya en mi controlador, en una de las acciones lo estoy configurando para la vista, como:
public function actionForForm() {
$options = $this->getList();
$this->set(''options'', $options);
}
Entonces, no quiero tener que copiar la función getList()
... ¿dónde puedo ponerla para que el Modelo pueda llamarla para llenar su matriz $listToCheck
?
Gracias por tu ayuda.