Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 可在视图中加载的数据库驱动菜单_Php_Laravel_Laravel 5_Laravel 5.1 - Fatal编程技术网

Php 可在视图中加载的数据库驱动菜单

Php 可在视图中加载的数据库驱动菜单,php,laravel,laravel-5,laravel-5.1,Php,Laravel,Laravel 5,Laravel 5.1,我使用控制器创建了一个数据库驱动菜单 HomeController扩展控制器,该菜单加载在控制器的构造函数中 HomeController.php class HomeController extends Controller { public function __construct() { parent::__construct(); $this->middleware('auth'); } public funct

我使用控制器创建了一个数据库驱动菜单

HomeController扩展控制器,该菜单加载在控制器的构造函数中

HomeController.php

class HomeController extends Controller
{


    public function __construct()
    {
        parent::__construct();
        $this->middleware('auth');
    }

    public function index(){
        $data['menu'] = $this->menu;
        return view('home', $data);
    }
}
public function __construct()
    {
        $this->user = Auth::user();

        $menu = new Menu();

        if($this->user != NULL && $this->user != ""){
            $this->menu = $menu->getMenu($this->user->user_id);
        }   
    }
Controller.php

class HomeController extends Controller
{


    public function __construct()
    {
        parent::__construct();
        $this->middleware('auth');
    }

    public function index(){
        $data['menu'] = $this->menu;
        return view('home', $data);
    }
}
public function __construct()
    {
        $this->user = Auth::user();

        $menu = new Menu();

        if($this->user != NULL && $this->user != ""){
            $this->menu = $menu->getMenu($this->user->user_id);
        }   
    }
我如何在视图级别直接调用函数,因为现在,即使菜单加载到构造函数中,我仍然需要将菜单传递给视图,这使得事情有点多余


p/S:使用laravel 5.1,通过以下命令从artisan生成一个新的ServiceProvider

php artisan make:provider ComposerServiceProvider
这将在app/Providers下创建一个新文件名composerviceprovider.php。在这个新创建的服务提供程序的引导函数中,您可以创建具有闭包的函数,如下所示:

view()->composer('partials.navbar', function ($view) {
        $view->with('genre', Genre::all());
    });
public function boot()
{
    $this->partialNav();
}

//create a function independently

public function partialnav()
{
    //code goes here
}
这里讨论的视图是view/partials下的navbar.blade.php,它将有一个名为genre的变量,可通过您的应用程序使用

为了使代码更简洁,您可以在Composer ServiceProvider中创建一个新函数,并将其命名为anything,比如partialnav。然后将执行以下操作:

view()->composer('partials.navbar', function ($view) {
        $view->with('genre', Genre::all());
    });
public function boot()
{
    $this->partialNav();
}

//create a function independently

public function partialnav()
{
    //code goes here
}
如果您想将其进一步分离,可以在app/Http名称下创建一个新文件夹,例如viewcomponers,在此文件夹下创建一个名为NavbarComposer.php的新文件,代码如下:

class NavbarComposer {


/**
 * Create a new profile composer.
 *
 * @param  UserRepository  $users
 * @return void
 */
public function __construct()
{
    // Dependencies automatically resolved by service container...
}

/**
 * Bind data to the view.
 *
 * @param  View  $view
 * @return void
 */
public function compose(View $view)
{
    //write your code to fetch the data 
    // and pass it to your views, following is an example
    $genre = genre::all();
    $view->with('genre', $genre);
}
}
现在回到CompositeServiceProvider的partialnav函数

public function partialNav()
{
    view()->composer('partials.nav', 'App\Http\ViewComposers\NavbarComposer');
}
不要忘记在config/app.php中添加这个新创建的ServiceProvider

App\Providers\ComposerServiceProvider::class,
您需要视图生成器:您可以将变量传递给所有视图或特定视图。