TGViewer
Одержимый кодом🔥 Одержимый кодом🔥 @cutcode · 343 subscribers
Post #53 502
Век живи - век учись. Или случаи когда интуиция подводит.

Пост о моих наблюдениях по объекту реквеста 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’) параметр с роута.
  • 🔥 12
  • ❤‍🔥 5
  • ❤ 1
  • 🤔 1
  • 🍓 1
More from @cutcode
  1. Sep 22, 2026Post #131
  2. Sep 11, 2026Но все еще скидка 15% по промокоду CUTCODE-26!
  3. Sep 11, 2026Пыхник’26 — 2 октября расскажу про осознанное использование AI. Скидка 15% по промокоду CU…
  4. Sep 11, 2026Теперь документация по Laravel пишется для ИИ-агентов. И скорей всего ИИ-агентами 😁
  5. Sep 11, 2026Топ-1 преимуществом Laravel всегда была документация. Теперь она будет для агентов. Помяне…
  6. Sep 9, 2026Пыхник’26 — целая неделя PHP! С 28 сентября по 2 октября пройдёт Пыхник’26 — онлайн-конфер…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →