Я пытался в течение некоторого времени, чтобы получить голову вокруг репозиториев в 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;
}
Это в вашем файле компоновщика боковой панели -
изменение:
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');