2015-09-29 3 views
0

В Laravel, я знаю, чтоКак работает «withANYTHING» способ передачи переменных на сеанс в Laravel?

return Redirect::back()->with(['Foo'=>'Bar']); 

эквивалентно

return Redirect::back()->withFoo('Bar'); 

Но ... как же это работает? Я имею в виду, создавая новую функцию withFoo на лету, чтобы передать переменную? Где это поведение определено внутри кода Laravel? Где я могу это проверить?

+1

Это '__set()' магический метод (хотя я не проверял, я уверен, что это так). Ларавель полон «волшебства». Я был неправ, см. Ответ KA_lin. – Andrew

+1

На самом деле это '__call()', посмотрите пример здесь http://www.garfieldtech.com/blog/magical-php-call –

+1

Вы можете проверить 'RedirectResponse.php' там вы можете найти все методы' with * '' Line No: 191 _call() ' –

ответ

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; 
} 
+1

Я лично считаю, что этот способ программирования делает отладку и просмотр кода совершенно адским ... – Amarnasan

+1

Ну, есть две стороны каждой монеты, особенно это СУХОЙ. – raina77ow

Смежные вопросы