TGViewer
Channel Public Channel
Заметки разработчика

Заметки разработчика

@dev_notes_ru

Заметки о Frontend, Backend и немного DevOps. В основном о #PHP, #Laravel, #JavaScript, #HTML, #CSS, тестировании и настройке серверов.

https://www.dev-notes.ru

@snakenf
Subscribers
458
Photos
740
Videos
4
Links
1.2K

Showing posts older than #1546 · Back to latest

Older Posts 20 shown
Post #1545 327
👩‍💻 Понимание селектора `:root` и CSS переменных

Используйте возможности CSS3 с селектором `:root`, упрощающим глобальную стилизацию, повышающим удобство сопровождения и открывающим динамичный, отзывчивый дизайн.

🖥 Читать статью

📱 @dev_notes_ru

#Frontend #CSS
  • 🔥 2
  • 👍 1
Post #1544 325
💡 Совет по Laravel: Контроль доставки уведомлений

Бывают случаи, когда необходимо определить, должно ли уведомление, поставленное в очередь, отправляться пользователю, например, когда пользователь может отказаться от уведомлений. Laravel поставляется с функцией shouldSend, позволяющей сделать именно это 🚀.

📱 @dev_notes_ru

#Laravel #tips
  • 👍 2
  • 🔥 1
Post #1541 370
CSS Working Group приняла решение разрешить синтаксис диапазона в запросах style. Можно сравнивать с переменной контейнера:

@container style(--var < 5em)


Но можно сравнивать и обычные значения:

style(1em < 20px)
style(sibling-count() > 3)


Функция style также может быть использована для условий встроенных if()

Функция style() разработана для работы с именами свойств, поэтому можно использовать переменные без var(). Возможно, когда-нибудь браузеры также позволят обращаться к нестандартным свойствам напрямую.

Но, так же можно использовать var(). Если вам нравится var() или возможность использования резервных значений, он тоже работает!

📱 @dev_notes_ru

#CSS #feature
  • 🔥 3
  • 👍 1
Post #1540 288
👩‍💻 Упрощение CSS с псевдоклассом `:is()`

Недавно появился повод воспользоваться новым псевдоклассом CSS `:is()`, и он превосходен! Хочу рассказать, как с его помощью можно значительно уменьшить сложность селекторов.

🖥 Читать статью

📱 @dev_notes_ru

#Frontend #CSS
  • 👍 1
  • 🔥 1
Post #1539 330
👩‍💻 Начиная с Laravel v12.4.0, можно объявить новый метод в классе миграции - shouldRun().

Как следует из названия, метод возвращает логическое значение, определяющее, должен ли Laravel запустить миграцию.

Этот метод может быть полезен в сценариях, когда необходимо условно выполнить определенные миграции в зависимости от условий запуска.

Например, можно создать таблицу реферальных программ, только если она включена в конфигурации 🚀.

📱 @dev_notes_ru

#Laravel #tips
Post #1538 285
💡 Совет по Laravel: Подсказка о пропущенных аргументах

Вам приходилось контролировать, что пользователь вводит необходимые аргументы в консоли? Laravel поставляется с контрактом PromptsForMissingInput для автоматической подсказки пользователю о пропущенных аргументах 🚀.

📱 @dev_notes_ru

#Laravel #tips
Post #1537 271
👩‍💻👩‍💻 Тёмная и светлая темы для SVG

Использование CSS функции `light-dark()` для реализации светлого и тёмного режима для SVG иконок,включая SVG, используемые с HTML элементом `img` или в качестве CSS свойства `background-image`.

🖥 Читать статью

📱 @dev_notes_ru

#Frontend #HTML #CSS
  • 👍 3
Post #1536 281
💡 Совет по PHP: `Callable` объекты первого класса

В PHP 8.1 появились callable объекты первого класса. Они могут добавлять синтаксический сахар, особенно при работе с коллекциями Laravel, где часто используются замыкания 🚀.

📱 @dev_notes_ru

#PHP #tips
  • 👍 3
Post #1535 284
99 мелких багов в коде
99 мелких багов в коде
Разобрались с одним, пропатчили его
117 мелких багов в коде

📱 @dev_notes_ru

#joke
  • 🔥 1
  • 👏 1
  • 🤣 1
Post #1534 292
Здесь сказано, что вы должны быть в аду, но поскольку вы писали на Ассамблере, мы засчитаем это как отработанное наказание.

📱 @dev_notes_ru

#joke
  • 🤣 1
Post #1533 330
👩‍💻 Laravel Context: Умное хранение и протоколирование данных в запросе

Начиная с Laravel 11+, фреймворк представил мощную функцию — Context, позволяющую хранить временные данные в рамках одного запроса, задания или консольной команды. А в Laravel 12 она стала ещё лучше — теперь контекст автоматически внедряется в логи, HTTP-запросы, события и исключения.

Примеры использования в приложении Laravel:

🛡 В middleware, сервисах или в любом другом месте вашего кода

use Illuminate\Support\Facades\Context;
use Illuminate\Support\Str;

Context::add('trace_id', (string) Str::uuid());
Context::add('app_section', 'checkout');
Context::add('server', gethostname());
Context::add('currency', 'USD');


📄 В контроллерах, логах или событиях:

Log::info('Payment started in section [{app_section}].', [
'user_id' => $user->id,
'amount' => $amount,
]);


🌐 При отправке внешних HTTP-запросов:

Http::withHeaders([
'X-Trace-Id' => Context::get('trace_id'),
])->post('https://api.payment.com/charge', [...]);


✨ Что можно хранить в `Context`?

✅ ID текущего пользователя или ID трассировки
✅ Имя сервиса/модуля
✅ Метаданные среды (сервер, регион, локаль)
✅ Флаги бизнес-логики (валюта, роль, точка входа)

✅ Преимущества использования Context:

✅ Глобальный доступ в рамках текущего запроса
✅ Безопасно и изолированно (не влияет на другие запросы)
✅ Автоматическая инъекция в логи, исключения, HTTP-вызовы, события и задания
✅ Идеально подходит для отладки, мониторинга и отслеживания запросов в больших или распределенных системах

📌 Думайте о Context как о «временном хранилище данных», которое может использоваться во всех приложениях и не нужно повсеместно передавать переменные. Это чистый, современный способ отслеживания и управления данными, относящимися к конкретным запросам.

📱 @dev_notes_ru

#Laravel #Context #tips
Post #1532 335
👩‍💻 PHP 8.4: Новый DOM Selector API — работа с DOM с помощью CSS селекторов!

В PHP 8.4 появилось мощное обновление — теперь можно выбирать элементы DOM с помощью CSS селекторов, как в JavaScript! Встречайте новые методы: querySelector() и querySelectorAll().

Примеры использования

✅ Выбор по классу и идентификатору:

$dom = new DOMDocument();
$dom->loadHTML('
<div id="title">Title by ID</div>
<div class="header">Title by class</div>
');

// По ID
$title = $dom->querySelector('#title');
echo $title->textContent; // Title по ID

// По классу
$header = $dom->querySelector('.header');
echo $header->textContent; // Title по классу


✅ Выбор нескольких элементов:

$dom = new DOMDocument();
$dom->loadHTML('
<ul>
<li class="item">Item 1</li>
<li class="item">Item 2</li>
</ul>
');

$items = $dom->querySelectorAll('.item');
foreach ($items as $item) {
echo $item->textContent . "\n";
}


✨ Почему это замечательно:

✅ Знакомый синтаксис CSS — чистый и интуитивно понятный
✅ Меньше шаблонов — больше никаких вложенных циклов или getElementsBy...()
✅ Точный выбор элемента — по идентификатору, классу, тегу или любой комбинации

📌 Теперь работа с HTML в PHP похожа на JavaScript — и это намного удобнее!

📱 @dev_notes_ru

#PHP #tips
  • 🔥 5
  • ❤ 2
  • 👍 2
  • 🤨 1
Post #1531 304
👩‍💻 Laravel: Не забудьте о начальной настройке!

Перед развертыванием проекта Laravel убедитесь, что параметры безопасности и стабильности правильно настроены. Вот несколько важных настроек, которые необходимо добавить в сервис провайдер (например, AppServiceProvider).

💡 Принудительное использование HTTPS в продакшне

Принудительное использование HTTPS для всех URL-адресов (кроме локального окружения):

private function enforceSecureUrls(): void
{
if (!$this->app->environment('local')) {
URL::forceScheme('https');
}
}


✅ Защищает пользовательские данные
✅ Предотвращает проблемы со смешанным контентом

💡 Предотвращение выполнения деструктивных команд базы данных

Отключение опасных SQL команд (DROP, TRUNCATE) в продакшне:

DB::prohibitDestructiveCommands($this->app->isProduction());


✅ Предотвращает случайную потерю данных в живой базе данных

💡 Включение кэширования конфигураций и маршрутов

Ускоряет работу приложения в продакшне:

php artisan config:cache
php artisan route:cache


✅ Снижает нагрузку на сервер и улучшает время отклика

💡 Где их разместить

Добавьте enforceSecureUrls() и DB::prohibitDestructiveCommands() в метод boot() своего AppServiceProvider:

public function boot(): void
{
$this->enforceSecureUrls();
DB::prohibitDestructiveCommands($this->app->isProduction());
}


📱 @dev_notes_ru

#Laravel #tips
  • ❤ 4
  • 👍 1
Post #1530 300
Из параллельной вселенной

📱 @dev_notes_ru

#joke
  • 👍 4
  • 😁 2
  • 🤣 2
Post #1528 386
🚀 Оптимизация SQL запросов

В SQL-запросе операторы выполняются в следующем порядке:

1. FROM / JOIN
2. WHERE
3. GROUP BY
4. HAVING
5. SELECT
6. DISTINCT
7. ORDER BY
8. LIMIT / OFFET

Приемы, применяемые на каждом этапе, помогают ускорить выполнение следующих шагов. Поэтому важно знать порядок их выполнения. Чтобы добиться максимальной эффективности, сосредоточьтесь на оптимизации шагов, расположенных на более ранних этапах запроса.

С учётом этого рассмотрим некоторые советы по оптимизации:

Максимизируйте выражение `WHERE`.

Это выражение выполняется раньше, поэтому оно предоставляет хорошую возможность уменьшить размер набора данных до того, как будет обработана остальная часть запроса.

Фильтруйте строки перед `JOIN`

Хотя запрос FROM/JOIN выполняется первым, всё равно можно ограничить количество строк. Чтобы ограничить количество присоединяемых строк, используйте подзапрос в операторе FROM вместо таблицы.

Используйте `WHERE` вместо `HAVING`

Выражение HAVING выполняется после WHERE и GROUP BY. Это означает, что при возможности стоит перенести все необходимые условия в выражение WHERE.

Не путайте `LIMIT`, `OFFSET` и `DISTINCT` с методами оптимизации

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

🖥 Порядок выполнения CQL запроса

📱 @dev_notes_ru

#SQL #DataBase #tips
  • 👍 3
  • 🔥 1
Post #1527 285
💡 Совет по Laravel: Привязка примитивов к значениям конфигурации

Иногда возникает необходимость привязать примитив к значению, например, к значению конфигурации. Вместо того чтобы использовать give() с обратным вызовом, Laravel предоставляет сокращение giveConfig, делающее именно это 🚀.

📱 @dev_notes_ru

#Laravel #tips
  • 👍 2
  • ❤ 1
Post #1526 274
👩‍💻 Что можно сделать с помощью middleware в Laravel

Вам приходилось писать одни и те же проверки в нескольких контроллерах? Например, форматирование вводимых данных, блокировка доступа или отслеживание пользовательской активности? Всё это начинает казаться повторяющимся, верно?... и быстро надоедает.

Вот тут-то и приходит на помощь middleware. Думайте о нём как о «вышибале» в приложении — он проверяет, изменяет или отклоняет запросы до того, как они попадут к контроллерам. Или даже после того, как запрос обработан (многие об этом не знают). Вместо того чтобы загромождать контроллеры повторяющейся логикой или разделять эту логику в трейте, middleware помогает добавлять функциональность по нескольким маршрутам более чистым и удобным способом.

🖥 Читать статью

📱 @dev_notes_ru

#Laravel #Middleware
  • 👍 2
  • ❤ 1
Older posts →
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 →