【问题标题】:Laravel "top-down" template renderingLaravel“自上而下”的模板渲染
【发布时间】:2016-01-03 07:38:19
【问题描述】:

我在使用 Laravel 和/或 Blade 时遇到了一个简单的问题,但不知道如何将其融入 Laravel 范式:

我有一个父视图,它应该显示不同子视图的列表。以我目前的理解,我需要深入到列表元素并“扩展”父元素。但是我应该如何插入兄弟模板?我需要一种“自上而下”而不是“自下而上”呈现模板的方法。

------ Parent template -----
group.show

    --------- List ---------
    group_assets.type-A.show
    group_assets.type-B.show
    group_assets.type-B.show
    group_assets.type-B.show
    group_assets.type-C.show
    group_assets.type-A.show

我的方法如下:

class GroupController extends Controller {
    ...

    public function show($id){
        $group = Group::find($id);

        $view = view('groups.show', [
            'group' => $group
        ]);


        $groupAssetController = new GroupAssetController();

        foreach($group->assets as $i => $asset){
            $view->with($groupAssetController->show($asset->id));
        }

        return $view;
    }

    ...
}



class GroupAssetController extends Controller{
    ...

    public function show($id){
        $asset = GroupAsset::find($id);

        return view('group_assets.' . $asset->type . '.show', [
            "asset" => $asset
        ]);
    }

    ...
}

【问题讨论】:

    标签: php laravel blade


    【解决方案1】:

    您可以使用@include 指令在主视图中包含子视图。首先,您应该预先加载资产:

    class GroupController extends Controller {
    
        public function show($id) {
            // Eager load assets
            $group = Group::with('assets')->find($id);
    
            return view('groups.show', [
                'group' => $group
            ]);
        }
    
    }
    

    然后您可以动态地包含子视图并传递每个子视图应该可用的资产模型:

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Master View</title>
    </head>
    <body>
        {{-- include subviews for each asset --}}
    
        @foreach($group->assets as $asset)
            @include('group_assets.' . $asset->type . '.show', ['asset' => $asset])
        @endforeach
    </body>
    </html>
    

    【讨论】:

    • 就这么简单...谢谢!
    猜你喜欢
    • 2020-03-28
    • 2016-04-04
    • 2018-10-03
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 2011-07-14
    • 2023-02-08
    相关资源
    最近更新 更多