dousaoxiancy199896 2018-08-08 10:53
浏览 108

如何在Laravel中同时基于同一个数据集渲染两个不同的视图?

We use Laravel 5.2 framework in a LAMP environment with nginx as a balancing front and memcached as HTML cache storage.

We have almost standard caching procedure when cache miss invokes controller action, than middleware puts rendered result in a cache storage and returns response.

Until now we've used responsive markup and one and the same view for mobile and desktop pages.

Now due to some reasons we have to return mobile or desktop HTML page version depending on request headers but both of them still hosted at one and the same URL and use one and the same dataset.

Very simple and fast decision was to separate memcached instances and render two views simultaneously in the same controller action, returning views array, than iterate through array in a caching middleware to store mobile or desktop versions in a relevante memcached instance.

It looks something like this:

Controller action returns views array:

...
return [
    ViewType::MOBILE => view('mobile.newsPage', $params),
    ViewType::DESKTOP => view('news.newsPage', $params)
];

Middleware caching method distributes result to cache storage instances:

...
foreach ($response->original as $viewType => $view) {
    ...
    $html = $view->render();
    $viewTypesStores[$viewType]->put($key, $html, $cachingTime);
    ...
}

There are some doubts if we do violate Laravel MVC pattern or another Laravel idiom or SOLID principles, changing Controller Action type from view to array, returning different page types at one and the same URL and if there are some better way to render several views based on one dataset avoiding DB double querying.

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 delta降尺度计算的一些细节,有偿
    • ¥15 Arduino红外遥控代码有问题
    • ¥15 数值计算离散正交多项式
    • ¥30 数值计算均差系数编程
    • ¥15 redis-full-check比较 两个集群的数据出错
    • ¥15 Matlab编程问题
    • ¥15 训练的多模态特征融合模型准确度很低怎么办
    • ¥15 kylin启动报错log4j类冲突
    • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
    • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序