在Laravel,我知道
return Redirect::back()->with(['Foo'=>'Bar']);
相当于
return Redirect::back()->withFoo('Bar');
但......它是如何运作的?我的意思是,动态创建一个新函数withFoo
来传递一个变量?在Laravel代码中定义了哪种行为?我在哪里查看?
答案 0 :(得分:1)
以下是它的实施方式(source):
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 Redirect.");
}
请记住,当尝试调用无法访问的方法时,会触发魔术方法__call。第一个参数是方法的名称,后跟传递的参数。在这种特殊情况下,触发RedirectResponse->with(),设置闪存数据:
public function with($key, $value = null)
{
$key = is_array($key) ? $key : [$key => $value];
foreach ($key as $k => $v) {
$this->session->flash($k, $v);
}
return $this;
}