TG Telegram Group & Channel
Одержимый кодом🔥 | United States America (US)
Create: Update:

Век живи - век учись. Или случаи когда интуиция подводит.

Пост о моих наблюдениях по объекту реквеста Laravel и небольшие заметки. Итак, я всегда думал, что


request(‘key’)

и


request()->get(‘key’)


это одно и то же, но в процессе разработки MoonShine было замечено странное поведение (на самом деле с объектом реквеста Ларавел такое было часто). Пришлось заглянуть под капот и удивится.


Первый вариант это сбор всего с реквеста и обращение по ключу, вот такой “красивый” код:


return $this->query->all()[$key];



return $this->request->all()[$key];


Второй же вариант еще более красивый, и под капотом мы не дергаем тот же самый метод get, а обращаемся к магическому __get (редко встречаются такие вызовы):


$value = app('request')->__get($key);


Который, в свою очередь, работает через класс Arr и позволяет обращаться к параметрам реквеста через точку (для вложенности). При этом если ничего не найдет, то дополнительно поищет в параметрах роута. Это намного тяжелее и результат может быть непредсказуемым. На самом деле меня и смутило, что мы еще лезем в роут, в объекте реквеста еще есть сессии (не удивился бы, если бы полезли сразу и туда)


public function __get($key)
{
return Arr::get($this->all(), $key, fn () => $this->route($key));
}


На заметку. Есть еще


request()->input(‘key’)


Который также через Arr::get соберет все параметры, но не полезет в роут

Ну и всегда был отдельный метод для получения исключительно параметров с роута


request()->route(‘key’)


Как раз его вызов я и не ожидал, когда дергал request(‘key’).
Тот случай, когда сахар вреден и легко запутаться.

Не перестаю удивляться решениям в реквесте Laravel и все чаще заглядываю под капот, когда речь идет о взаимодействии с Laravel.

В итоге:

request(‘key’) лучше не использовать. Я думаю врядли вам потребуется получать значение отовсюду откуда только можно.

request()->get(‘key’) нормально, но без вложенности через точку.

request()->input(‘parent.key’) наверное, идеально подойдет для подобных манипуляций, плюс вложенность.

request()->route(‘key’) параметр с роута.

Век живи - век учись. Или случаи когда интуиция подводит.

Пост о моих наблюдениях по объекту реквеста Laravel и небольшие заметки. Итак, я всегда думал, что


request(‘key’)

и


request()->get(‘key’)


это одно и то же, но в процессе разработки MoonShine было замечено странное поведение (на самом деле с объектом реквеста Ларавел такое было часто). Пришлось заглянуть под капот и удивится.


Первый вариант это сбор всего с реквеста и обращение по ключу, вот такой “красивый” код:


return $this->query->all()[$key];



return $this->request->all()[$key];


Второй же вариант еще более красивый, и под капотом мы не дергаем тот же самый метод get, а обращаемся к магическому __get (редко встречаются такие вызовы):


$value = app('request')->__get($key);


Который, в свою очередь, работает через класс Arr и позволяет обращаться к параметрам реквеста через точку (для вложенности). При этом если ничего не найдет, то дополнительно поищет в параметрах роута. Это намного тяжелее и результат может быть непредсказуемым. На самом деле меня и смутило, что мы еще лезем в роут, в объекте реквеста еще есть сессии (не удивился бы, если бы полезли сразу и туда)


public function __get($key)
{
return Arr::get($this->all(), $key, fn () => $this->route($key));
}


На заметку. Есть еще


request()->input(‘key’)


Который также через Arr::get соберет все параметры, но не полезет в роут

Ну и всегда был отдельный метод для получения исключительно параметров с роута


request()->route(‘key’)


Как раз его вызов я и не ожидал, когда дергал request(‘key’).
Тот случай, когда сахар вреден и легко запутаться.

Не перестаю удивляться решениям в реквесте Laravel и все чаще заглядываю под капот, когда речь идет о взаимодействии с Laravel.

В итоге:

request(‘key’) лучше не использовать. Я думаю врядли вам потребуется получать значение отовсюду откуда только можно.

request()->get(‘key’) нормально, но без вложенности через точку.

request()->input(‘parent.key’) наверное, идеально подойдет для подобных манипуляций, плюс вложенность.

request()->route(‘key’) параметр с роута.


>>Click here to continue<<

Одержимый кодом🔥




Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)