使用视图编辑器时如何避免查询重复?

时间:2015-08-23 01:20:42

标签: php laravel-5

我正在使用Laravel 5.1。

我有很多观点,它们以某种方式包含在彼此中。例如,我有主要布局,一些模态窗口,一些自定义页面。所以基本上我有N个观点。

让我向您展示一个具体的例子。 layout.blade.php是基本布局。 companies/index.blade.php是公司列表。 modals/companies/create.blade.php是一个模态模板,包含在布局中。

想象一下,我有一份公司行业清单。我需要向modals/companies/create.blade.phpcompanies/index.blade.php提供列表。该列表不应该从控制器传递,因为它的代码重复并且列表与任何条件无关,所以我不想用相同的代码行污染控制器

所以我有一个视图编辑器服务提供者,我将视图编辑器链接到视图。我可能有两种方法:

  1. 每个视图编辑器代表一小部分数据,例如" IndustriesViewComposer"提供行业清单
  2. 每个视图编辑器代表某些视图所需的所有数据,例如" CreateCompanyModalViewComposer"
  3. 当我尝试第一种方式时,我的服务提供文件如下:

    'App\ViewComposers\IndustriesViewComposer' => [
        'modals.companies.create',
        'modals.companies.edit'
        ... some other views ...
    ],
    

    在这种情况下,如果某些视图包含在同一视图中,则将复制检索行业列表的查询。因此,如果我有许多小视图作曲家和相应的视图,那么在我将这些视图包含在一起的情况下,查询会重复。由于我有很多模态包含在一起,我得到重复。

    在第二种方式中,我只有一个视图作曲家用于一个视图。这种情况也是如此。例如,我知道我需要提供公司创建模式的行业列表,以及我需要提供给公司版模式的相同列表。

    查看作曲家的分享无法奏效,因为我只需要为登录用户的特定页面提供数据。

    所以基本上问题是:如果在当前请求中呈现视图并且避免重复,如何为多个视图执行一个查询。

    想象一下,我有一个公司页面。 1)在我的系统的每个页面中,我都有公司创建模式,需要行业列表 2)在单一公司页面中,我包括需要行业清单的公司版模式 3)单页还需要行业清单

    如何只检索一次列表并将其提供给单一视图,新公司模式和编辑公司模态视图?

1 个答案:

答案 0 :(得分:-1)

您可以使用中间件。在中间件中,您进行查询并使用绑定到IoC容器来保存模型(或集合)。

因此,在您的中间件中,您可以(例如):

$my_data = Data::where('some_field','some_value')->first();

App::instance('my_data_saved', $my_data);

不要忘记包含use App;

之后,您可以使用IoC Container访问所需的数据(控制器,视图等),例如:

<title>{{ App::make('my_data_saved')->title }}</title>

然后,您只需要在需要视图数据的路径或控制器中包含中间件。