如何将此菜单包含到我所有的视图中?[Laravel 5]

9 浏览
0 Comments

如何将此菜单包含到我所有的视图中?[Laravel 5]

您好,我正在尝试从我的表格中创建一个菜单,然后我想将它分享给我的视图。目前我尝试的是这样的:

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Input;
use App\Menu as menumodel;
class Maincontroller extends Controller
{
    public function __construct()
    {
        $items = menumodel::tree();
        View::make('items', $items);
    }
}
class HomeController extends Maincontroller{}
@include('public_template.header')

POST 页面以演示多级菜单

@include('public_template.footer') @include('public_template.sidebar')

General

但是使用上述脚本时,我遇到了以下错误:

Undefined variable: items (View:
  D:\xampp\htdocs\sitestarter\resources\views\public_template\sidebar.blade.php)
  (View:
  D:\xampp\htdocs\sitestarter\resources\views\public_template\sidebar.blade.php)
  (View:
  D:\xampp\htdocs\sitestarter\resources\views\public_template\sidebar.blade.php)

如何解决这个问题?提前感谢您,对于我的糟糕英语表示抱歉。

参考链接:[如何在Laravel 5中将数据传递给所有视图?](https://stackoverflow.com/questions/28608527/how-to-pass-data-to-all-views-in-laravel-5)

我正在遵循Dhaval Chheda的方法,但我仍然无法理解。我创建了`MenuComposer`:

namespace App\Http\ViewComposers;
use Illuminate\View\View;
class MenuComposer
{
    public $menu = [];
    public function __construct()
    {
        $this->items = menumodel::tree();
    }
    public function compose(View $view)
    {
        $view->with('items', end($this->items));
    }
}

然后在`app\config.php`中添加了这一行:

App\Providers\ComposerMenuProvider::class,

有解决方案吗?我仍然遇到相同的错误。

0
0 Comments

问题的出现原因是作者想要在所有的视图中包含一个菜单。解决方法是使用视图组合器(View Composer)。

首先,作者创建了一个名为ContactComposer的文件,放在Http/ViewComposers文件夹中。文件内容如下:

namespace App\Http\ViewComposers;
use Illuminate\View\View;
class ContactComposer
{
    public function compose(View $view)
    {
        $view->with('PhoneNumber', '1111111111');
    }
}

然后,在AppServiceProvider的boot方法中,作者将所有的视图与上述视图组合器绑定起来:

View::composer(
    '*', 'App\Http\ViewComposers\ContactComposer'
);

这样就可以在所有的视图中包含该菜单了。作者解释说,为了更好地组织文件结构,他创建了ViewComposers文件夹,但这并非必需。

希望这对你有所帮助。

0