Ver Mensaje Individual
  #8 (permalink)  
Antiguo 28/07/2013, 11:45
Avatar de dashtrash
dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: MVC options en controlador o vista

Usando el MVC "típico", efectivamente, tendrás que usar un "snippet", "helper", "partial","twig",etc,etc.Personalmente, yo en esas cosas leo "hack","pseudohack","otro hack",etc,etc.

Una forma ligeramente mejor de hacerlo, es una mezcla de las dos opciones que propones.En el controlador, inicializar una fuente de datos, y pasar a la vista esa fuente de datos.La fuente de datos NO es un modelo.Una fuente de datos puede ser una query, o array, un fichero ini, o cualquier otra cosa.(Hay Datasources simples o compuestos, los simples pueden ser de acceso aleatorio o no,etc...Hay muchas formas de hacer esto).

Una forma que yo considero "elegante" de hacerlo, es pasarle a una factoría, el modelo, y el nombre de la columna del modelo que quieres editar.Con esa información, acceder a la metadata de la columna.Comprobar que es una relación con la tabla "TipoVehiculo", y que la forma por defecto de editar ese tipo de columna, es con un "select".Así que genera el select, a menos que la metadata de la columna especifique otra cosa.
Es decir, que la definición del campo "TipoVehiculo" en el modelo , es:
Código HTML:
Ver original
  1. $this->definition=array(
  2.      ....
  3.      "FIELDS"=>array(...
  4.                "TipoVehiculo"=>array("Type"=>"Relationship",
  5.                                                   "Table"=>"TiposVehiculo",
  6.                                                   "RemoteField"=>"id_tipovehiculo",
  7.                                                   "Multiplicity"=>"1:N",
  8.                                                    "Required"=>true,
  9.                                                    "Default"=>"NULL",
  10.                                                    "Output"=>array(
  11.                                                           "HTML"=>array(
  12.                                                                      "EditAs"=>"Select"                                                                      
  13.                                                                      )
  14.                                                     )
  15.                                        )
  16.      .....
Si en este array cambias "Select" por "Radio", todos los formularios que editen este modelo
deberían cambiar su tipo de input.
Esta solución es DRY.Supón que, en vez de una relación, el tipo de dato es una cadena de caracteres.En la metadata del campo, puedes especificar la longitud máxima del campo.Leyendo esta metadata, puedes generar un input de tipo TEXT con ese número de caracteres.Cualquier framework que se autoproclame "DRY", pero que no sea capaz de llevar las restricciones de los tipos de datos de las columnas del modelo, desde la base de datos, hasta el javascript del navegador, no es DRY.
Pero bueno, ya me he ido mucho por las ramas