Qual é a melhor maneira de criar menus acionados banco de dados dinâmico no CakePHP?

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

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu quero exibir um menu em cada página que é executado a partir de um banco de dados. Usando apenas para baixo e php isso é sujos fáceis, mas eu quero integrá-lo com cakephp usando seu sistema MVC. Agora a minha pergunta é como é a melhor maneira de fazer isso?

Meus pensamentos estão a fazer um elemento com o layout e, em seguida, um componente ou controlador para toda a lógica. Todas as sugestões sobre este assunto? Ou é um ajudante que eu quero usar?

Eu também preciso para obter todos os dados de várias tabelas no banco de dados. É melhor fazer todos os meus dados coleta lógica através de um modelo? Ou fazer mais do que no controlador menu (ou componente) e usar os modelos para cada tabela?

Obrigado,

Walter

Foi útil?

Solução

Os modelos devem buscar e processar dados da tabela que estão modelising, então buscar dados de menu para cada modelo nesse modelo.

Os componentes se destinam a lógica casa partilhada por vários controladores, portanto, um componente de menu que é usado por todos os seus controladores soa como um bom lugar para colocar o código para buscar os dados do menu de modelos e mash-lo juntos.

Um menu é tipicamente uma lista aninhada, se este for o caso com o seu menu também, a maneira mais fácil para a saída a marcação para esta é uma função recursiva (uma função que se chama) que gera um nível de cada vez, então em vez de um elemento, eu tinha acabado de criar um auxiliar com um método de menu () lá, e chamada que diretamente do layout.

Outras dicas

Eu concordo com a resposta neilcrooks, mas gostaria de acrescentar algumas coisas para maior clareza.

Ajudantes e os elementos são bastante simples, exceto que ajudantes pode ser um pouco mais robusto (pelo menos, é assim que eu penso deles;)). Então, se você usar um ajudante, você pode ligar e associações modelo unbind no fly -. Que lhe permitirá dados garra de seus modelos (temporariamente) associados

Pessoalmente, eu como modelos de gordura e controladores skinny, então eu acho que se eu estivesse nessa situação, eu usaria um ajudante e temporariamente ligam os modelos a ele. Todos os dados que eu preciso para ir buscar a partir dos modelos existentes seriam acessados ??através Model1-> fetchMenuPart (...) Tipo de chamadas.

Em seguida, você pode chamar o seu ajudante de seu arquivo (s) layout.

Eu não sei por que isso não está documentado em qualquer lugar, mas eu só descobri isso ontem à noite. As variáveis ??para seu layout ou elementos têm de ser definidas com o _for_layout terminando. Por exemplo: $ this-> set ( 'categories_for_layout', $ this-> Categoria-> find ( 'all'));

Eu usei o método beforeFilter na classe AppController, porque eu precisava nesse menu em cada página.

Aqui está uma excelente solução que eu descobri durante a pesquisa para esta mesma coisa na internet.

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

Eu acho que você usaria criar um elemento que iria realizar o html para o menu e, em seguida, tornar o menu em seu layout.

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

Para torná-lo dinâmico você definir os links do menu, talvez como uma matriz no controlador.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top