Как расширить класс Laravel, где метод возвращает представление - PullRequest
0 голосов
/ 26 февраля 2019

Я не уверен, является ли это вопросом 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 голосов
/ 26 февраля 2019

Вы можете захватить представление, возвращенное родительским контроллером, и выполнить слияние с его данными.

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);
    }
}
...