¿Cuál es la mejor manera de crear menús dinámicos basados ??en bases de datos en CakePHP?

StackOverflow https://stackoverflow.com/questions/613996

  •  03-07-2019
  •  | 
  •  

Pregunta

Quiero mostrar un menú en cada página que se ejecuta desde una base de datos. Usar php solo y sucio es fácil, pero quiero integrarlo con cakephp usando su sistema MVC. Ahora mi pregunta es ¿cómo es la mejor manera de hacer esto?

Mis pensamientos son hacer un elemento con el diseño y luego un componente o controlador para toda la lógica. ¿Alguna sugerencia sobre esto? ¿O es un Ayudante lo que quiero usar?

También necesito obtener todos los datos de varias tablas en la base de datos. ¿Es mejor hacer toda mi lógica de recolección de datos a través de un modelo? ¿O hacer la mayor parte en el controlador de menú (o componente) y usar los modelos para cada tabla?

Gracias,

Walter

¿Fue útil?

Solución

Los modelos deben buscar y procesar datos de la tabla que están modelando, por lo que deben buscar datos de menú para cada modelo en ese modelo.

Los componentes están diseñados para alojar la lógica compartida por varios controladores, por lo que un componente de menú que utilizan todos sus controladores parece un buen lugar para colocar el código para obtener los datos del menú de los modelos y combinarlos.

Un menú suele ser una lista anidada, si este también es el caso de su menú, la forma más fácil de generar el marcado es una función recursiva (una función que se llama a sí misma) que genera un nivel a la vez, por lo que en lugar de un elemento, simplemente crearía un ayudante con un método menu () allí, y lo llamaría directamente desde el diseño.

Otros consejos

Estoy de acuerdo con la respuesta de neilcrooks, pero me gustaría agregar algunas cosas para mayor claridad.

Los ayudantes y los elementos son bastante simples, excepto que los ayudantes pueden ser un poco más robustos (al menos, así es como pienso en ellos;)). Entonces, si usa un ayudante, puede vincular y desvincular asociaciones de modelos sobre la marcha, lo que le permitirá obtener datos de sus modelos (temporalmente) asociados.

Personalmente, me gustan los modelos gordos y los controladores delgados, por lo que creo que si estuviera en esta situación, usaría un ayudante y los vincularía temporalmente. Se accedería a todos los datos que necesito obtener de los modelos existentes a través de llamadas de tipo Model1- > fetchMenuPart (...).

Luego puede llamar a su ayudante desde su (s) archivo (s) de diseño.

No sé por qué esto no está documentado en ninguna parte, pero lo encontré anoche. Las variables para su diseño o elementos deben definirse con la terminación _for_layout. Por ejemplo: $ this- > set ('categories_for_layout', $ this- > Category- > find ('all'));

Utilicé el método beforeFilter en la clase AppController, porque necesitaba ese menú en cada página.

Aquí hay una gran solución que descubrí mientras buscaba esto en Internet.

http://articles.classoutfit.com/cakephp-dynamic-navigation- barras /

Creo que usarías crear un elemento que mantendría el html para el menú y luego mostraría el menú en tu diseño.

echo $this->element('your menu');

Para que sea dinámico, establezca los enlaces del menú, tal vez como una matriz en el controlador.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top