Laravel Blade模板特定代码

6

目前我们在多个项目中使用Laravel框架,但我们一直遇到一个问题,让我不喜欢的是以下问题:

假设你有一个主页和一个内容页

HomepageController包含所有主页特定的php代码 ContentpageController包含所有内容特定的php代码

我们有一个app.blade.php文件,其中包含:

@yield('page')

HomepageController调用视图homepage.blade.php。
@extends('app')

@section('page')
     Some HTML part
     @include('parts.top_5')
@endsection

ContentController调用视图content.blade.php,其中包含

@extends('app')

@section('page')
     Some different HTML part
     @include('parts.top_5')
@endsection

在这里,您可以看到两个页面都包含parts.top_5,top 5需要一些特定的变量来输出top5。现在问题是我们目前正在将top5变量的代码复制到两个控制器或分组中间件中,但是否有更好的解决方案可以在包含该部分时生成一些特定于blade的变量?所以有点像在加载刀片模板时运行控制器函数?
我已经搜索了互联网,但似乎找不到任何人有同样的问题。希望有人能帮助我解决这个令人崩溃的问题!

我的英语不是很好,但你的意思是想通过 @include 将数据传递给视图,如果是这样,请尝试使用 @include('view.name',['data' => 'yourdata'])。 - xenish
1个回答

2
您可以将此绑定添加到AppServiceProvider(或您想要的任何自定义ServiceProvider)中,如下所示:
public function boot()
{
    $view->composer('parts.top_5', function($view) {
        $view->with('any_data' => 'You want');
    })
}

这样,每当 Laravel 组合 parts.top_5 视图时,该闭包方法将被触发。
在文档中,它在这里: http://laravel.com/docs/5.0/views#view-composers

刚刚谷歌搜索了一下,发现你没有发布链接,但找到了同样的页面。现在我可以看到Laravel在v5.0文档中添加了这个功能,非常酷,我打算尝试一下,似乎正是我需要的。 - RemcoDN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接