2012-11-24 22 views
10

Qual è il miglior luogo concettuale in cui inserire la logica dei dati di menu in Laravel. Se utilizzo Menu bundle dove metterlo. In Base_Controller creare una funzione aggiuntiva o qualcosa di diverso?Dove posizionare la logica di menu in Laravel?

+0

ciò che è "la logica di menu"? –

+0

Ad esempio ottenere gli elementi del menu dal DB e aggiungere alla memoria Menu (pacchetto), per il rendering nelle viste. – Orbitum

risposta

24

Nota: questa risposta è stata scritta per laravel 3 e potrebbe o potrebbe non funzionare con il più recente laravel 4


mio modo preferito di creazione di menu dinamico si ottiene separando la menu parte dal layout principale e inietta i dati del menu tramite Composer di Laravel (non confondilo con Composer PHP package manager, sono cose diverse)

<!-- layouts/default.blade.php --> 

<div id="header">Title</div> 

<div id="menu"> 
    @render('parts.menu') 
</div> 

<div id="content"></div> 
<div id="footer"></div> 

 

<!-- parts/menu.blade.php --> 

<ul> 
@foreach($menuitems as $menuitem) 
    <li>{{ $menuitem->title }}</li> 
@endforeach 
</ul> 

 

Infine si può iniettare la variabile tramite compositore.

<?php 

// application/routes.php 

View::composer('parts.menu', function($view){ 
    $view->with('menuitems', Menu::all()); 
}); 

questo modo ogni parts/menu.blade.php è chiamato, compositore intercetterà la vista e iniettare con $menuitems variabile. E 'stesso che usare with su return View::make('blahblah')->with('menuitems', Menu::all())

Speranza che aiuta :)


Edit: Se non piace avere logiche di routes.php si può mettere in start.php e prendere in considerazione modo Jason Lewis' di dividere lo start.php in file separati.

Creare una directory in application denominata start e riempirla con alcuni file.

+ application [DIR] 
    \-> + start [DIR] 
     |-> autoloading.php 
     |-> composers.php 
     |-> filters.php 
     \-> validation.php 

Quindi aggiungere queste righe di codice nella parte finale del tuo application/start.php

require __DIR__ . DS . 'start' . DS . 'autoloading.php'; 
require __DIR__ . DS . 'start' . DS . 'filters.php'; 
require __DIR__ . DS . 'start' . DS . 'composers.php'; 
require __DIR__ . DS . 'start' . DS . 'validation.php'; 

Hai l'idea. Metti le funzioni del compositore in compositers.php.

leggere l'intero articolo qui: http://jasonlewis.me/article/laravel-keeping-things-organized

+0

Penso che tu abbia unito due risposte in una! – Orbitum

+3

Nelle nuove versioni, invece di @render ('parts.menu') usa @include ('parts.menu') – hugronaphor

+0

@CornelAndreev: qual è la differenza tra render & include? – akhyar

0

Per quanto riguarda il recupero dei dati in un view composer e l'utilizzo di un HTML macro per la generazione dell'HTML?

Laravel ha spesso molti modi di fare le cose. Detto questo, a volte può essere un po 'travolgente e confuso.

+1

Nella documentazione su view composer si dice che _ "I compositori sono tipicamente definiti in application/routes.php" _. Uso le rotte solo per il routing non per la logica, esiste una soluzione senza percorsi? – Orbitum

+0

Non hanno niente a che fare con i percorsi, puoi metterli dove vuoi - di solito in un file extra di helpers. – Franz

+0

Ok, e dove mettere questa logica (compositore)? Nella funzione Base_Controller? Questa è la mia domanda principale. Capisco che ci sono molte cose flessibili in Laravel, ma non so dove metterle. – Orbitum

Problemi correlati