要将数据从路由闭包或控制器传递到视图,请执行以下操作之一:
$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 中,所有当前视图变量都会自动包含在部分视图中。现在我更倾向于指定变量(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 只是传递。希望这是有道理的。