我怀疑。我一直在检查laracasts,他们展示了一些从路由器到视图传递变量的例子:
Route::get('about', function() {
$people = ['Eduardo', 'Paola', 'Chancho'];
return view('about')->with('people', $people);
});
Route::get('about', function() {
$people = ['Eduardo', 'Paola', 'Carlos'];
return view('about')->withPeople($people);
});
第二个例子,我不确定Laravel如何处理它。我知道它有效我测试了它,但它们使用的是哪种模式?为什么可以处理动态变量。
提前感谢您的帮助!
答案 0 :(得分:2)
第二个是由Laravel通过php的__call魔术方法处理的。此方法通过Illuminate\View\View
类中的此代码将所有以'with'开头的方法重定向到with方法:
public function __call($method, $parameters)
{
if (Str::startsWith($method, 'with')) {
return $this->with(Str::snake(substr($method, 4)), $parameters[0]);
}
throw new BadMethodCallException("Method [$method] does not exist on view.");
}
正如您所看到的方法是否以'with'(Str::startsWith($method, 'with')
开头,Laravel将第一个参数作为“with”{{1}后面的字符串重定向到with return $this->with
。第二个参数作为传递的第一个参数Str::snake(substr($method, 4))
希望这有帮助!
答案 1 :(得分:0)
试试这个,它有效。
Route::get('about', function() {
$people = ['Eduardo', 'Paola', 'Chancho'];
return view('about',compact('people'));
});
答案 2 :(得分:0)
尝试此操作以在视图中传递数据
Route::get('about', function() {
$data['people'] = ['Eduardo', 'Paola', 'Chancho'];
return view('about')->withdata($data);
});