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

0

Я пытался в течение некоторого времени, чтобы получить голову вокруг репозиториев в 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;
}
Теги:
variables
repository
controller
laravel-4

1 ответ

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
    эти ублюдочные опечатки .. ненавижу их .. спасибо.
  • 0
    почему * вместо имени вида?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню