【发布时间】:2012-11-12 14:55:17
【问题描述】:
在 Laravel 中放置菜单数据逻辑的最佳概念位置是什么。如果我使用菜单包放在哪里。在Base_Controller 中创建附加功能或不同的东西?
【问题讨论】:
-
例如从数据库中获取菜单元素并添加到菜单(捆绑)存储中,以便在视图中呈现。
在 Laravel 中放置菜单数据逻辑的最佳概念位置是什么。如果我使用菜单包放在哪里。在Base_Controller 中创建附加功能或不同的东西?
【问题讨论】:
注意:此答案是为 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>
<!-- 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 变量。这与在return View::make('blahblah')->with( 'menuitems', Menu::all() ) 上使用with 相同
希望对你有帮助:)
编辑:如果您不喜欢 routes.php 中的逻辑,可以将其放入 start.php 并考虑 Jason Lewis 将 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';
你明白了。将 composer 函数放在 composers.php 中。
在此处阅读整篇文章:http://jasonlewis.me/article/laravel-keeping-things-organized
【讨论】:
如何获取view composer 中的数据并使用HTML macro 生成HTML?
Laravel 经常有很多做事的方式。也就是说,这有时可能会让人有点不知所措和困惑。
【讨论】: