Laravel позволяет вам передавать данные таким образом для удобства, но они не являются магическими методами . Магические методы - это имя, данное выбранному набору методов в классах PHP, которые обычно начинаются с двойного подчеркивания __
, каждый со своими собственными целями.Примеры магических методов: __call
, __callStatic
, __toString
и т. Д.
Laravel использует магические методы PHP, в частностимагический метод __call
, чтобы обеспечить функциональность, которую вы испытываете.Метод __call
вызывается PHP, когда вы пытаетесь вызвать метод, который не существует в объекте.В качестве первого параметра он получает имя вызываемого метода, а второй параметр - аргументы, переданные в вызов метода в виде массива.
Laravel использует это, реализуя метод __call
вView
класс.Он проверяет, начинается ли начало метода, вызванного разработчиком, с with
и, если это так, он будет предполагать, что следующая часть имени метода представляет имя переменной, с которой вы хотите связать данные при рендерингеview:
From Illuminate\View\View
:
/**
* Dynamically bind parameters to the view.
*
* @param string $method
* @param array $parameters
* @return \Illuminate\View\View
*
* @throws \BadMethodCallException
*/
public function __call($method, $parameters)
{
if (! Str::startsWith($method, 'with')) {
throw new BadMethodCallException("Method [$method] does not exist on view.");
}
return $this->with(Str::camel(substr($method, 4)), $parameters[0]);
}
Это обеспечивает функциональность, которую вы испытываете, и эта техника фактически используется в нескольких разных местах,например, в построителе запросов / Eloquent вы можете динамически добавлять предложения where к запросу, просто вызывая метод, начинающийся с where
, а оставшаяся часть вызова метода ссылается на столбец, который вы проверяете:
User::whereEmail('foo@bar.com'); // Equal to User::where('email', 'foo@bar.com');