在Laravel中放置菜单逻辑的位置?

Orb*_*tum 10 php menu laravel

在Laravel中放置菜单数据逻辑的最佳概念是什么.如果我使用菜单包放在哪里.在Base_Controller创建附加功能或不同的东西?

akh*_*khy 26

注意:这个答案是为Laravel 3编写的,可能会也可能不适用于最新的Laravel 4


我最喜欢的创建动态菜单的方法是通过将菜单部分与主布局分离并通过Laravel的Composer注入菜单数据来实现(不要将它与Composer PHP包管理器混淆,它们是不同的东西)

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

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

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

<div id="content"></div>
<div id="footer"></div>
Run Code Online (Sandbox Code Playgroud)

 

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

<ul>
@foreach($menuitems as $menuitem)
    <li>{{ $menuitem->title }}</li>
@endforeach
</ul>
Run Code Online (Sandbox Code Playgroud)

 

最后我们可以通过composer注入变量.

<?php 

// application/routes.php

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

这样每次parts/menu.blade.php调用时,Composer都会拦截视图并将其注入$menuitems变量.这与使用withreturn 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
Run Code Online (Sandbox Code Playgroud)

然后将这些代码行添加到您的末尾 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';
Run Code Online (Sandbox Code Playgroud)

你明白了.将composer函数放在composers.php中.

阅读整篇文章:http://jasonlewis.me/article/laravel-keeping-things-organized

  • 在新版本中,使用@include('parts.menu')代替@render('parts.menu') (3认同)