Laravel,传递变量来查看

时间:2017-01-19 04:25:20

标签: php laravel

我怀疑。我一直在检查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如何处理它。我知道它有效我测试了它,但它们使用的是哪种模式?为什么可以处理动态变量。

提前感谢您的帮助!

3 个答案:

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