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

时间:2017-07-13 06:39:34

标签: php 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);
    }
}

然后在我的控制器(HomeController)中。我这样做

class HomeController extends Maincontroller{}

然后这是我的观点

@include('public_template.header')
<div class="right_col" role="main">
  <div class="">
    <div class="page-title">
      <div class="title_left">
        <h3>POST <small> Page to demonstrate multilevel menu</small></h3>
      </div>
    </div>
  </div>
</div>
@include('public_template.footer')

在我的public_template.header中,我只需添加public_template.sidebar,这里的内容为public_template.sidebar

 <div id="sidebar-menu" class="main_menu_side hidden-print main_menu">
              <div class="menu_section">
                <h3>General</h3>
                 <ul class="nav side-menu">
                  @foreach($items as $item)
                  <li><a><i class="fa fa-home"></i> Home <span class="fa fa-chevron-down"></span></a>
                    <ul class="nav child_menu">
                      <li><a href="index.html">Dashboard</a></li>
                      <li><a href="index2.html">Dashboard2</a></li>
                      <li><a href="index3.html">Dashboard3</a></li>
                    </ul>
                  </li>
                  @endforeach
                </ul>
              </div>

            </div>

但是上面的脚本我得到了这个错误

  

未定义的变量:items(查看:   d:\ XAMPP \ htdocs中\ sitestarter \资源\意见\ public_template \ sidebar.blade.php)   (视图:   d:\ XAMPP \ htdocs中\ sitestarter \资源\意见\ public_template \ sidebar.blade.php)   (视图:   d:\ XAMPP \ htdocs中\ sitestarter \资源\视图\ public_template \ sidebar.blade.php)

我该如何解决?提前谢谢,抱歉我的英文不好

REF How to pass data to all views in Laravel 5?

我遵循Dhaval Chheda方法。但我仍然无法做到。

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class ComposerMenuProvider extends ServiceProvider
{

    public function boot()
    {
        view()->composer(
            'app',
            'App\Http\ViewComposers\MenuComposer'
        );    }


    public function register()
    {
        //
    }
}

然后我创建MenuComposer

<?php

namespace App\Http\ViewComposers;

use Illuminate\View\View;

    class MenuComposer
    {
        public $menu = [];
        /**
         * 
         *
         * @return void
         */
        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,

任何解决方案?我仍然得到同样的错误;

1 个答案:

答案 0 :(得分:3)

我正在使用View Composer,如下所示

我在Http / ViewComposers文件夹中创建了一个名为ContactComposer的新文件,如下所示

namespace App\Http\ViewComposers;

use Illuminate\View\View;
//use App\Repositories\UserRepository;

class ContactComposer
{
    /**
    //  * The user repository implementation.
    //  *
    //  * @var UserRepository
    //  */
    // protected $users;

    // *
    //  * Create a new profile composer.
    //  *
    //  * @param  UserRepository  $users
    //  * @return void

    // public function __construct(UserRepository $users)
    // {
    //     // Dependencies automatically resolved by service container...
    //     $this->users = $users;
    // }

    /**
     * Bind data to the view.
     *
     * @param  View  $view
     * @return void
     */
    public function compose(View $view)
    {
        $view->with('PhoneNumber', '1111111111');
    }
}

并在AppServiceProviders内部引导方法我将所有视图绑定到上面的View Composer

// Using class based composers...
        View::composer(
            '*', 'App\Http\ViewComposers\ContactComposer'
        );

希望这会有所帮助