Laravel репозиторий для рекурсивной функции меню

Некоторое время я пытался разобраться с репозиториями в Laravel, но чего-то не хватает в моих интерпретациях различных уроков. Я думаю, мне трудно понять логику репозиториев. На самом деле, я даже не уверен, правильно ли я иду.
Дело в том, что у меня есть рекурсивная функция для создания меню, и я пытаюсь абстрагировать его, чтобы я мог использовать его более свободно.
Прямо сейчас я пытаюсь достичь способа передачи переменной $ mainPages через каждый метод HomeController. Я опубликую несколько последних воплощений моего кода выше. Надеюсь, что кто-то может пролить свет на меня, о том, что я могу делать неправильно, потому что я продолжаю получать неопределенную переменную независимо от того, что я пытаюсь.

routes.php

Route::get('{lang}/{slug}', array('uses'=>'HomeController@getPages'));

MainPagesRepository.php

namespace Repositories;

use Page;

class MainPagesRepository {

public function getAll()
{
$mainPages = Page::join('langs', 'langs.id', '=', 'pages.lang_parent_id')
->where('parent_id', null)
->get();

return $mainPages;
}
}

SidebarComposer.php

namespace Composers;

use Repositories\MainPagesRepository;

class SidebarComposer {

protected $mainPages;

public function __construct(MainPagesRepository $mainPages)
{
$this->mainPages = $mainPages;
}

public function compose($view)
{
$view->with('mainPages', $this->mainPages->getAll());
}
}

Composer.php

View::composer('index', 'Composers\SidebarComposer');

HomeController.php

public function getPages($lang, $slug)
{
$allPages = $this->getAllPages($mainPages);

return View::make('index')
->with('allPages', $allPages);
}

private function getAllPages($pages) {
$allPages = array();

foreach ($pages as $page) {
$subArr = array();
$subArr['title'] = $page->title;
$subArr['slug'] = $page->slug;
$subPages = Page::where('parent_id', '=', $page->id)
->get();

if (!$subPages->isEmpty()) {
$result = $this->getAllPages($subPages);

$subArr['sub'] = $result;
}

$allPages[] = $subArr;

}

return $allPages;
}

0

Решение

Это в вашем файле композитора боковой панели —

менять:

protected $mainPage;

в

protected $mainPages;

менять

$view->with('mainPages', $mainPages->mainPages->getAll());

в

$view->with('mainPages', $this->mainPages->getAll());

Вам также может понадобиться изменить свою строку:

View::composer('index', 'Composers\SidebarComposer');

в

View::composer('*', 'Composers\SidebarComposer');
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]