Русский
Открыть в Telegram

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

6 июня 2024
О
Одержимый кодом🔥
Век живи - век учись. Или случаи когда интуиция подводит. Пост о моих наблюдениях по объекту реквеста 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’) параметр с роута.
3 · 502 ·

Рядом в ленте

ООдержимый кодом🔥Прощай Spatie/Ignition!😐 С версии 11.9, Spatie/ignition больше не входит в коробку Laravel. Это означает, что в режиме дебага нас теперь будет ждать более компаООдержимый кодом🔥Законтрибьютил сахара ребятам в Buggregator/trap https://github.com/buggregator/trap/releases/tag/1.8.0 Кстати рекомендую Buggregator! После обзора вошел в мой
это сообщение
ООдержимый кодом🔥Только что пощупал IDX от Google! Делюсь своими впечатлениями, собственно канал для этого и создан. Щупал в процессе общения в чате MoonShine: задали вопрос, я ООдержимый кодом🔥Муки выбора. Нейминг геттеров и сеттеров Недавно я задумался о правилах нейминга геттеров и сеттеров. Всегда придерживался правила с префиксом getName, setName,
ООдержимый кодом🔥Одержимый кодом🔥@cutcode · канал
349подписчиков86постов в индексе
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Границы индекса · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем