Laravel中的页眉控制器

时间:2017-12-01 12:07:15

标签: php laravel

我第一次在Laravel工作

我必须在页眉和页脚中创建前端菜单动态[类别列表将来自数据库]。我必须使用哪个控制器。? 此框架中可用的任何公共控制器,用于将数据发送到页眉和页脚。

当我在HomeController索引Action中收到数据时,它仅适用于主页。

class HomeController {
public function index() 
    {
        $categories = Category::get();
        return view('home', compact('categories'));
    }
}

感谢。

3 个答案:

答案 0 :(得分:2)

我假设您在主布局文件中使用页眉和页脚。在这种情况下,您需要发送每个请求的所有页眉/页脚信息。这将是愚蠢的,而是使用View Composers

appServiceProvider方法

中的boot()中定义它们
view()->composer('home', function($view) {
   $view->with('categories', App\Category::all());
});

在我的例子中,我创建了'home'视图的名称,因为它在您的示例中。但我会创建一个名为布局的主文件,并包含页眉和页脚部分。如果您希望标题中包含类别,则可以使用标题数据生成view()->composer('layout.header')

答案 1 :(得分:2)

这是View Composers的完美案例:

  

视图组合器是在呈现视图时调用的回调或类方法。如果每次渲染视图时都希望将数据绑定到视图,则视图编辑器可以帮助您将该逻辑组织到一个位置。

您可以通过将一组视图作为第一个参数传递给composer方法,一次将视图编辑器附加到多个视图:

View::composer(['partials.header', 'partials.footer'], function ($view) {
    $view->with('categories', [1, 2, 3]); // bind data to view
});

现在,您只需在视图中检索$categories(刀片模板)。

提示:通常的做法是创建一个名为ComposerServiceProvider的新服务提供程序,并将上述编写器逻辑放在boot()方法中。

答案 2 :(得分:0)

  

我必须使用哪个控制器。?

任何

  

此框架中可用于将数据发送到页眉和页脚的任何常用控制器

没有。 您可以控制从Controller返回的内容作为响应。您可以设计布局并将其分解为多个部分,并具有扩展它们的视图。如果您设置了包含页眉和页脚的布局并且视图从中扩展,则可以使用View Composer在渲染时将数据传递到该布局,这样您每次需要返回时都不必执行此操作看待自己。

Laravel Docs 5.5 - Front End - Blade

Laravel Docs 5.5 - Views - View Composers