如何包含像刀片一样的Laravel Controller文件

时间:2014-10-31 08:34:54

标签: laravel laravel-4

首先,我的master.blade文件包含使用此菜单栏

包含Blade文件menu.blade.php

 @include('menu')

但最后我意识到要从db发送一些数据到菜单栏,然后​​我创建控制器,控制器名称是MenuController,然后我创建路由“ admin-menu ”。 现在我想将该链接包含在我的主刀片中。如何做到这一点谢谢,

1 个答案:

答案 0 :(得分:1)

要从路由闭包或控制器将数据传递到视图,请执行以下操作之一:

$now = \Carbon\Carbon::now();

View::make('my-view', ['name' => 'Alex', 'date' => $now]);       // pass data into View:::make()
View::make('my-view')->with(['name' => 'Alex', 'date' => $now]); // pass data into View#with()
View::make('my-view')->withName('Alex')->withDate($now);         // use fluent View#with()

所以你只是在View :: make()调用中使用它们,因为你可能已经这样做了:

// in a route closure
Route::get('some-route', function () {
    return View::make('menu', ['name' => 'Alex']);
});

// in a controller
public function someRoute()
{
    return View::make('menu', ['name' => 'Alex']);
}

有趣的是,在很多框架/模板系统中,如果你想要包含部分内容,你可以在部分调用中传递你希望在该部分中可用的数据,但是Laravel并不是这样。这样做。例如,在一个虚构的系统中你可能有这样的东西:

// in controller:
$this->render('home', ['name' => 'Alex', 'age' => 30]);

// home.php
<?php echo $name; ?>
<?php echo $this->partial('home-age', ['age' => $age]); ?>

// home-age.php
<?php echo $age; ?>

但是在Laravel中,所有当前视图变量都会自动包含在partial中。现在我倾向于指定变量(Blade允许你像上面那样执行此操作),显然它可以用来覆盖视图变量:

// route:
return View::make('home', ['name' => 'Alex', 'age' => 30, 'gender' => 'male']);

// home.blade.php
{{ $name }}
@include('home-extra', ['age' => 20])

// home-extra.blade.php
{{ $age }}
{{ $gender }}

上面的代码会输出:

Alex
20
male

所以在@include中覆盖了年龄,但未被覆盖的gender只是被传递过来。希望这是有道理的。