看看Laravel代码,我发现他们正在通过'路由'观看'观看'使用以下方法:
$arraysan = ['mike','robert','john']; **//Variable to be passed**
return view('home')->withArraysan($arraysan); **//Variable passed with** name "withArraysan"
在上面的语法中,他们调用了一个名为withArraysan
的函数,该函数不存在。
有人可以解释一下如何在Laravel中处理它吗?
答案 0 :(得分:3)
现在,PHP已经有了magic methods
的概念 - 这些是可以添加到类中以拦截不存在的方法调用的特殊方法。
Laravel Views似乎实现了__call
- 然后拦截对该对象的未定义方法的调用,并传递被调用方法的名称以及参数。通过这种方式,View对象可以看到withArraysan
调用开始with
并调用具体方法with
,并将第二部分Arraysan
作为第一个参数传递,并且withArraysan
作为第二部分的论点。
答案 1 :(得分:2)
如果我在Laravel得到了你的问题,那么他们会使用魔术方法View
来使用__call
来处理上述函数,该函数的代码如下所示
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.");
}
你可以在
中找到它your_project_folder/vendor/laravel/framework/src/Illuminate/View/View.php
答案 2 :(得分:0)
$arraysan = ['mike', 'robert', 'john']; // Variable to be passed
return view('home')->with('AnyVariable', $arraysan);
试试这个!这将有效。
另请查看home.blade.php,
<?php
print_r($AnyVariable);die;
?>