Где разместить логику меню в 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 часто имеет много способов делать вещи. Тем не менее, это, вероятно, может быть немного подавляющим и запутанным время от времени.