Магические методы в Ларавеле - PullRequest
0 голосов
/ 21 октября 2018

Итак, я недавно узнал, что вместо использования

$users = User::all();
return view('home')->with('users', $users);

Вы можете сделать

return view('home')->withUsers($users);

Я считаю, что они известны как «магические методы» - они где-то задокументированы?Есть ли список, который я могу найти, или это единственный?

1 Ответ

0 голосов
/ 21 октября 2018

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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...