我已经尝试了一段时间来了解Laravel中的知识库,但我对各种教程的解释中缺少一些东西。我想我很难理解存储库逻辑。实际上我甚至不确定我是否正确行事。 问题是我有一个递归函数来构建一个菜单,我正在尝试抽象它,所以我可以更自由地使用它。 现在,我想要实现的是一种将变量$ mainPages传递给HomeController上的每个方法的方法。我将在上面发布我的代码的最后一个版本。希望有人可以对我说一些关于我可能做错的事情,因为无论我尝试什么,我都会得到一个Undefined变量。
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 :(得分: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');