Kar*_*ong 5 php laravel laravel-5 laravel-5.1
我使用Controller创建了一个数据库驱动的菜单,
HomeController扩展了Controller在Controller的构造函数中加载的控制器.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么能在视图级别直接调用函数,因为现在,即使在构造函数中加载了菜单,我仍然需要将菜单传递给视图,这会使事情变得有点多余.
P/S:使用laravel 5.1
通过以下命令从 artisan 生成一个新的 ServiceProvider
php artisan make:provider ComposerServiceProvider
Run Code Online (Sandbox Code Playgroud)
这将在 app/Providers 下创建一个新文件名 ComposerServiceProvider.php。在这个新创建的服务提供者的引导函数中,您可以创建带有闭包的函数,如下所示:
view()->composer('partials.navbar', function ($view) {
$view->with('genre', Genre::all());
});
Run Code Online (Sandbox Code Playgroud)
这里有问题的视图是 view/partials 下的 navbar.blade.php ,它将在您的应用程序中提供一个名为类型的变量。
为了让你的代码更简洁,你可以做的是在 ComposerServiceProvider 中创建一个新函数,并将其命名为任何名称,比如partialnav。然后将执行以下操作:
public function boot()
{
$this->partialNav();
}
//create a function independently
public function partialnav()
{
//code goes here
}
Run Code Online (Sandbox Code Playgroud)
如果你想进一步分离它,你可以在 app/Http 下创建一个新文件夹,名称为 ViewCompoers,在此文件夹下创建一个名为 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);
}
}
Run Code Online (Sandbox Code Playgroud)
现在回到 ComposerServiceProvider 的partialnav 函数
public function partialNav()
{
view()->composer('partials.nav', 'App\Http\ViewComposers\NavbarComposer');
}
Run Code Online (Sandbox Code Playgroud)
不要忘记在 config/app.php 中添加这个新创建的 ServiceProvider
App\Providers\ComposerServiceProvider::class,
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
206 次 |
| 最近记录: |