2015-10-21 10 views
5

Tôi đã tạo ra một thực đơn cơ sở dữ liệu điều khiển sử dụng một bộ điều khiển,Cơ sở dữ liệu điều khiển menu có thể được nạp theo quan điểm

HomeController mở rộng điều khiển mà menu được nạp trong chức năng xây dựng Kiểm Soát Tài Chính.

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); 
    } 
} 

Controller.php

public function __construct() 
    { 
     $this->user = Auth::user(); 

     $menu = new Menu(); 

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

Làm thế nào tôi có thể, gọi hàm thẳng ở mức độ xem vì ngay bây giờ, mặc dù đơn được tải trong các nhà xây dựng, Tôi vẫn sẽ cần phải vượt qua menu để xem mà làm cho mọi thứ một chút dư thừa.

P/S: Sử dụng laravel 5.1

+2

Bạn cần xem trình soạn thảo: http://laravel.com/docs/5.1/views#view-composers Bạn có thể chuyển các biến cho tất cả hoặc các chế độ xem cụ thể. – Iamzozo

Trả lời

3

Tạo một ServiceProvider mới từ thợ thủ công bằng lệnh sau

php artisan make:provider ComposerServiceProvider 

này sẽ tạo ra một tên tập tin mới ComposerServiceProvider.php dưới app/Providers. Trong chức năng khởi động của nhà cung cấp dịch vụ mới được tạo này, bạn có thể tạo ra các chức năng với việc đóng cửa như sau:

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

đây xem trong câu hỏi là navbar.blade.php dưới xem/partials mà sẽ có một biến tên là thể loại có sẵn thông qua trong ứng dụng của bạn.

Để làm cho mã của bạn sạch hơn những gì bạn có thể làm là tạo ra một chức năng mới trong ComposerServiceProvider và đặt tên cho nó bất cứ điều gì cho phép nói partialnav. Sau đó sẽ làm như sau:

public function boot() 
{ 
    $this->partialNav(); 
} 

//create a function independently 

public function partialnav() 
{ 
    //code goes here 
} 

Nếu bạn muốn tách riêng nó thậm chí nhiều hơn bạn có thể tạo một thư mục mới trong ứng dụng/Http tên nó cho phép nói ViewCompoers, Dưới thư mục này tạo một file mới có tên NavbarComposer.php với đoạn mã sau:

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); 
} 
} 

bây giờ trở lại chức năng partialnav của ComposerServiceProvider bạn

public function partialNav() 
{ 
    view()->composer('partials.nav', 'App\Http\ViewComposers\NavbarComposer'); 
} 

Đừng quên để thêm video này ServiceProvider mới được tạo ra trong cấu hình của bạn/app .php

App\Providers\ComposerServiceProvider::class, 
Các vấn đề liên quan