Laravel" withVariableName"作品?

时间:2016-03-28 13:05:53

标签: php laravel

看看Laravel代码,我发现他们正在通过'路由'观看'观看'使用以下方法:

$arraysan = ['mike','robert','john'];    **//Variable to be passed**
return view('home')->withArraysan($arraysan); **//Variable passed with** name "withArraysan"

在上面的语法中,他们调用了一个名为withArraysan的函数,该函数不存在。

有人可以解释一下如何在Laravel中处理它吗?

3 个答案:

答案 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;
?>