繁体   English   中英

laravel 4-将多个控制器中的相似数据拉入许多视图

[英]laravel 4 - pull similar data in multiple controllers into many views

我有这样的用户路线:

用户/ 13 /文章/ 10
用户/ 13 /视频/ 443
用户/ 13 /项目/ 4002

我想每次加载帖子/视频/项目视图时提取与“ user / 13”相关的所有数据。 我还加载了侧边栏@include('inc / blog-sidebar'),此文件包含的数据在所有视图中都相同,并且与'user / 13'有关。

提取所有这些信息而不在每个控制器中按功能执行的最佳方法是什么?

我已经尝试了route.php中的view:composer(这很糟糕),但我无法获取用户ID并获取相关信息。

View::composer('posts.show', function($view)
{
    $author = User::find(1);
    $view->with('author',$author);
});

另外,如果这是最好的解决方案,那么我应该在哪里存储View Composer?

谢谢!

要使用视图编辑器自动向视图填充数据,请执行以下操作:

首先,为这样的任何URI例如user/13user/15创建一个路由模式(在routes.php文件中):

// Composers will be used only for this url pattern, i.e. "user/13" or "user/15"
Route::when('user/*', 'prepareView');

然后创建如下的prepareView过滤器:

Route::filter('prepareView', function($route, $request) {

    // Register your three view composers
    View::composers(array(
        // Call the "postsViewComposer" method from
        // ViewComposers for "posts.show" view
        'ViewComposers@postsViewComposer' => 'posts.show',

        // Call the "videsViewComposer" method from
        // ViewComposers for "videos.show" view
        'ViewComposers@videsViewComposer' => 'videos.show',

        // Call the "itemsViewComposer" method from
        // ViewComposers for "items.show" view
        'ViewComposers@itemsViewComposer' => 'items.show',
    ));

});

然后在app/viewcomposers文件夹中创建ViewComposers类:

class ViewComposers {

    public function postsViewComposer($view)
    {
         // Get user id, for example, 15
        $id = Route::current()->parameter('id');

        // Then use it to retrieve the model   
        $author = User::find($id);
        return $view->with('author', $author);
    }

    public function videsViewComposer($view)
    {
        // Logic for this view composer
    }

    public function itemsViewComposer($view)
    {
        // Logic for this view composer
    }
}

最后,您需要在autoload->classmap中的composer.json文件中添加新class ,如下所示:

"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        // ...
        "app/viewcomposers"
]

最后,只需从项目的根目录中的command prompt/terminal运行composer dump-autoload 而已。 现在,每当请求具有任何id任何用户的URI时,这些view composers就会运行以准备视图。

我认为您是在谈论急切的加载。 你可以这样

User::with('posts','videos')->get();

请参阅急切加载

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM