如何在方法返回视图的地方扩展Laravel类

时间:2019-02-26 19:11:44

标签: laravel view extends

我不确定这是Laravel问题还是基本的PHP问题。

我们有一个由很多微型站点组成的站点。该功能在所有微型网站之间共享,实际上只是每个微型网站的外观都不同。

在我们的结构中,我们有一个名为HierarchyController的控制器,每个微型站点都使用该控制器。正如您可能会收集到的那样,此控制器负责获取您碰巧当时正在查看的任何微型网站的页面层次结构。控制器类似于以下内容

Class HierarchyController extends BaseController
{
    public function index(Request $request)
    {
        ... do some stuff ...

        $page_data = [
            'something' => 'something_else',
        ];

        return view('common.pages.hierarchy', $page_data);
    }
}

到目前为止没有困难。但是现在我只需要几个微型站点的HierarchyController来包含它们自己的属性以及HierarchyController的属性。我想我可以创建一个微站点特定的HierarchyController,以扩展上面的主控制器。像这样:

Class MicrositeHierarchyController extends HierarchyController
{
    public function index(Request $request)
    {
        parent::index($request);

        $page_data = array_merge(--parent_page_data--, [
            'something1' => 'something_else_1',
        ]);

        return view('microsite.pages.hierarchy', $page_data);
    }
}

因为父级HierarchyController返回一个视图而不是一个数组,所以我不确定如何从调用类中获取$ page_data。这有可能吗?

谢谢

1 个答案:

答案 0 :(得分:1)

您可以捕获父控制器返回的视图并对其数据执行合并。

class MicrositeHierarchyController extends HierarchyController
{
    public function index(Request $request)
    {
        $view = parent::index($request);

        $page_data = array_merge($view->getData(), [
            'something1' => 'something_else_1',
        ]);

        return view('microsite.pages.hierarchy', $page_data);
    }
}