【问题标题】:How to extend Laravel class where the method returns a view如何在方法返回视图的地方扩展 Laravel 类
【发布时间】:2019-07-20 09:49:38
【问题描述】:

我不确定这是 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。这甚至可能吗?

谢谢

【问题讨论】:

  • 也许您可以将生成 $page_data 的部分重构为父控制器中的方法并在子控制器中调用该方法?
  • 或者重构 index 方法以在您的父控制器中接受第二个参数 ($page_data)。
  • 虽然我确实有父控制器的来源,但它是由另一家公司管理的。我可以轻松更改它,但很有可能,他们会在某个时候更新他们的课程,这将覆盖我的更改

标签: laravel view extends


【解决方案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);
    }
}

【讨论】:

  • 像魅力一样工作。非常感谢。
  • @Typhoon101 Np :)
猜你喜欢
  • 2015-12-07
  • 1970-01-01
  • 2018-09-15
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 2017-03-19
  • 2020-05-18
  • 2014-09-08
相关资源
最近更新 更多