在Laravel,我知道如何在Laravel中將變量傳遞給會話的「WITHANYTHING」方法?
return Redirect::back()->with(['Foo'=>'Bar']);
相當於
return Redirect::back()->withFoo('Bar');
但是......它是如何工作的?我的意思是,創建一個新的功能withFoo
即時傳遞變量?這個行爲在Laravel代碼中定義在哪裏?我在哪裏可以檢查它?
在Laravel,我知道如何在Laravel中將變量傳遞給會話的「WITHANYTHING」方法?
return Redirect::back()->with(['Foo'=>'Bar']);
相當於
return Redirect::back()->withFoo('Bar');
但是......它是如何工作的?我的意思是,創建一個新的功能withFoo
即時傳遞變量?這個行爲在Laravel代碼中定義在哪裏?我在哪裏可以檢查它?
下面是它是如何實現的(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;
}
這是'__set()'魔術方法(雖然我沒有檢查,我敢肯定是這樣的話)。 Laravel充滿了「魔力」。我錯了,請看KA_lin的答案。 – Andrew
其實它是'__call()',在這裏檢查一個例子http://www.garfieldtech.com/blog/magical-php-call –
你可以檢查'RedirectResponse.php'那裏你可以找到'with * ''Line No:191 _call()' –