update strategy many has associated validation cakephp drop-down-menu

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.