【发布时间】:2015-08-23 01:20:41
【问题描述】:
我正在使用 Laravel 5.1。
我有很多观点,它们以某种方式相互包含。例如,我有主布局、一些模式窗口、一些自定义页面。所以基本上我有 N 个视图。
让我给你看一个具体的例子。 layout.blade.php 是基本布局。 companies/index.blade.php 是公司列表。 modals/companies/create.blade.php 是一个包含在布局中的模态模板。
假设我有一份公司行业列表。我需要将列表提供给modals/companies/create.blade.php 和companies/index.blade.php。列表不应该从控制器传递,因为它是一种代码重复,并且列表与任何条件无关,所以我不想用相同的代码行污染控制器。
所以我有一个视图编写器服务提供商,我将视图编写器链接到视图。我可能有两种方法:
- 每个视图编写器代表一小部分数据,例如服务于行业列表的“IndustriesViewComposer”
- 每个视图合成器都代表某个视图所需的所有数据,例如“CreateCompanyModalViewComposer”
当我尝试第一种方式时,我的服务提供文件如下所示:
'App\ViewComposers\IndustriesViewComposer' => [
'modals.companies.create',
'modals.companies.edit'
... some other views ...
],
在这种情况下,如果某些视图包含在同一视图中,则检索行业列表的查询将重复。因此,如果我有许多小视图编写器和相应的视图,那么查询会重复,以防我将这些视图包含在一起。由于我有许多包含在一起的模态,所以我得到了重复。
在第二种方式中,一个视图只有一个视图作曲家。同样的情况也发生在这里。例如,我知道我需要为公司创建模式提供行业列表,并且我需要为公司版本模式提供相同的列表。
作曲家的视图共享不起作用,因为我只需要为已登录的用户提供特定页面的数据。
所以基本上问题是:如何为多个视图执行一个查询,以防视图在当前请求中呈现并避免重复。
假设我只有一个公司页面。 1)在我系统的每个页面中,我都有需要行业列表的公司创建模式 2)在单个公司页面中,我包括需要行业列表的公司版本模式 3) 单页也需要行业列表
如何只检索一次列表并将其提供给单一视图、新公司模式和编辑公司模式视图?
【问题讨论】:
-
您不能简单地在执行查询的模型中创建一个方法吗?还是你在寻找更性感的东西?