PHP MVC, ver manejo de bucles
Frecuentes
Visto 1,202 equipos
0
Mi controlador devuelve una matriz PDO de varias filas y columnas. ¿Cuál es la mejor manera de recorrer los datos en mi archivo de vista? (¿o debería estar haciendo más lógica en el modelo?)
$user->getDetails(); //returns array in view
foreach($user->getDetails() as $row) // Prehaps? But how to index without being explicit with column names?
¡Gracias!
4 Respuestas
2
El objetivo de la vista es ejecutar la lógica relacionada con la vista y generar resultados (es decir, tomar los datos y formatearlos según sea necesario... si es una vista JSON, generar JSON. HTML, generar HTML, etc.), por lo que está haciendo bien. Revíselo como mejor le parezca, pero sin más detalles sobre su estructura de datos, no podemos decir más de lo que ya ha averiguado.
Respondido 31 Jul 12, 15:07
1
La mejor manera o el enfoque que se utiliza en , haga las cosas relacionadas con la base de datos en el modelo y formatee el diseño en la vista. En su caso debe llamar al MVC
es mantener su lógica de programación en el controlador$user->getDetails();
en el controlador y luego pasar el resultado en la vista y luego hacer un bucle para generar los datos, es decir
En el controlador puede rellenar una variable con $user->getDetails()
$user_details=$user->getDetails();
Entonces pasa $user_details
a la vista cuando lo carga y en la vista lo repite
foreach( $user_details as $row ){
echo $row->id;
echo $row->name;
}
Si el resultado es un array of arrays
en lugar de an array of objects
entonces puedes usar de la siguiente manera
foreach( $user_details as $row ){
echo $row['d'];
echo $row['name'];
}
Actualización:
- El modelo es responsable de administrar los datos; almacena y recupera entidades utilizadas por una aplicación, generalmente de una base de datos, y contiene la lógica implementada por la aplicación.
- La vista (presentación) se encarga de mostrar los datos proporcionados por el modelo en un formato específico. Tiene un uso similar con los módulos de plantilla presentes en algunas aplicaciones web populares, como wordpress, joomla, …
- El controlador maneja el modelo y las capas de vista para que funcionen juntas. El controlador recibe una solicitud del cliente, invoca el modelo para realizar las operaciones solicitadas y envía los datos a la Vista. La vista da formato a los datos que se presentarán al usuario, en una aplicación web como una salida html.
Referencia: Controlador de vista de modelo (MVC) en PHP y Esta.
respondido 12 nov., 13:17
1
foreach( $user->getDetails() as $row ){
echo $row->name;
echo $row->id;
}
No necesita colocar $user->getDetails() en la parte superior, llamará a la función en el foreach.
Respondido 31 Jul 12, 15:07
Gracias. Esperaba que esta fuera una respuesta sugerida. - craig wilson
1
La capa del modelo debe contener toda la lógica empresarial. Y no debería devolver nada al controlador. En su lugar, el controlador debería simplemente enviar mensajes a las estructuras de capas del modelo.
Los datos de la capa del modelo deben extraerse por instancia de vista. Y dependiendo de la naturaleza de los datos, decidiría qué plantillas aplicar.
Se supone que las vistas en MVC contienen toda la lógica de presentación y (en el caso de patrones de diseño inspirados en MVC relacionados con la web) se ocupan de varias plantillas. También debe tener en cuenta que existe una relación 1:1 entre vistas y controladores.
Si parte de la información que esa vista recibe de la capa del modelo es algún tipo de matriz, tiene dos opciones. O toma una plantilla, que puede representar un solo elemento y generar repetidamente el fragmento HTML/JSON/texto/XML o usa una plantilla, que espera recibir una matriz como variable y ya contiene un bucle. El último enfoque suele ser el más pragmático, pero cada uno de ellos como contras y pros específicos.
Respondido 31 Jul 12, 17:07
Como estoy usando CodeIgniter, respondí como descrito aquí por ejemplo. Este $data['query'] = $this->Blog->get_last_ten_entries();
está dentro de un controlador y está recuperando datos del modelo, lo que significa que el modo está devolviendo datos al controlador y luego el controlador pasa los datos a la vista de fecha de la siguiente manera $this->load->view('blog', $data);
. - El alfa
Tal vez me pueda aclarar si estoy malinterpretando algo para poder aclararme, gracias. - El alfa
¿Por qué está pegando enlaces a uno de los dos marcos de php que funcionan en este tema? Lo que CI llama "modelos" son instancias de registro activo. Activerecord es una fusión de objetos de dominio(que sería solo una parte de una capa de modelo bien implementada) y lógica de almacenamiento. - teresko
@SheikhHeera Encontrará que la mayoría de las discusiones sobre "MVC" tienen poca relevancia para CodeIgniter. CI hace no implementar el patrón MVC (a pesar de lo que diga el wiki de CI), sino algo más cercano a MVP (pero con plantillas). Básicamente, nunca logrará que CI se ajuste completamente al patrón MVC tradicional. - orourkek
@orourkek, gracias, pero ¿puede proporcionar alguna referencia en línea sobre MVC
? - El alfa
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas php templates or haz tu propia pregunta.
EQUIVOCADO ! El controlador no debe contener lógica comercial ni de presentación. - teresko
La mejor manera o el enfoque que se utiliza en MVC es mantener su lógica de programación en el controlador, hacer las cosas relacionadas con la base de datos en el modelo (...) <= lo dijiste aquí. Además, el modelo no es una abstracción de base de datos. - teresko
@tereško, estoy confundida, ¿puedes aclarar más qué quisiste decir? Todavía estoy diciendo que el controlador debe contener toda la lógica de programación y desde allí debe llamar a las funciones del modelo declaradas en cualquier modelo. - El alfa
Gracias por su respuesta informada. Sin embargo, ¿por qué no puedo llamar a la función desde la vista? Es decir, ¿por qué asignarlo a una variable y luego pasarlo a la vista? ¿No es un código innecesario? Espero su respuesta. Gracias. - craig wilson
@SheikhHeera Aunque NO investigó lo suficiente (!) y leyó libros, su respuesta satisfizo el OP, obtuvo los votos a favor más altos, me recuerda la batalla constante entre un hombre de negocios exitoso y un estudiante de negocios. - Muhammad Usman