Где разместить логику меню в Laravel?
что является лучшим концептуальным местом для размещения логики данных меню в Laravel. Если я использую Menu bundle, куда его поместить. В Base_Controller
создать дополнительную функцию или что-то другое?
2 ответов
Примечание: этот ответ был написан для Laravel 3 и может или не может работать с самым последним Laravel 4
мой любимый способ создания динамического меню достигается путем отделения части меню от основного макета и ввода данных меню через композитор Laravel (не путайте его с менеджером пакетов PHP Composer, это разные вещи)
<!-- 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>
наконец, мы можем ввести переменную через composer.
<?php
// application/routes.php
View::composer('parts.menu', function($view){
$view->with('menuitems', Menu::all());
});
так каждый раз parts/menu.blade.php
вызывается, Composer перехватит представление и введет его с $menuitems
переменной. Это то же самое, что использовать with
on return View::make('blahblah')->with( 'menuitems', Menu::all() )
надеюсь, что это помогает :)
редактировать: Если вам не нравится логика в routes.php
вы можете положить его в start.php
и рассмотрим Джейсона Льюиса способ разделения start.php
в отдельные файлы.
создайте каталог в application
под названием start
и заполните его некоторыми файлами.
+ application [DIR]
\-> + start [DIR]
|-> autoloading.php
|-> composers.php
|-> filters.php
\-> validation.php
затем добавьте эти строки кода в конец вашего 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';
у вас есть идея. Поместите функции композитора в composers.РНР.
прочитайте всю статью здесь:http://jasonlewis.me/article/laravel-keeping-things-organized
Как насчет извлечения данных в просмотр composer и с помощью HTML-код макрос для генерации HTML?
Laravel часто имеет много способов делать вещи. Тем не менее, это, вероятно, может быть немного подавляющим и запутанным время от времени.