Заметки разработчика
473 subscribers
667 photos
4 videos
1.16K links
Заметки о Frontend, Backend и немного DevOps. В основном о #PHP, #Laravel, #JavaScript, #HTML, #CSS, тестировании и настройке серверов.

https://www.dev-notes.ru

@snakenf
Download Telegram
🚀 Улучшенные директивы Blade!

Laravel 12 расширяет возможности Blade, добавляя удобные директивы для элементов формы:

@checked - устанавливает checked, если условие истинно.
@selected - устанавливает selected для выпадающих элементов
@readonly - Добавляет атрибут readonly
@required - Добавляет атрибут required

📌 Пример:

<input type="checkbox" name="subscribe" @checked($user->subscribed)>
<select name="role">
<option value="admin" @selected($user->role === 'admin')>Admin</option>
</select>
<input type="text" name="username" @readonly($user->is_admin)>
<input type="email" name="email" @required($user->needs_verification)>


Эти директивы делают шаблоны Blade чище и читабельнее!

📱 @dev_notes_ru

#Laravel #Blade
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Что такое TypeScript. Обзор для JavaScript программистов

Если вы JavaScript программист и хотите получить представление об использовании TypeScript (первый шаг перед изучением подробностей), то эта статья для вас.

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

📱 @dev_notes_ru

#TypeScript
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
💡 Совет по Laravel: Извлечение текста между строками

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

📱 @dev_notes_ru

#Laravel #String #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
💡 Совет по Laravel: Трейт `MassPrunable`

Если вы очищаете модели с помощью трейта Prunable и не используете события модели, воспользуйтесь трейтом MassPrunable, чтобы очистить их с помощью одного запроса. Это гораздо эффективнее 🚀.

📱 @dev_notes_ru

#Laravel #Eloquent #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
💡 Совет по Laravel: Преобразование `Response` в `Exception`

При использовании API запрос может завершиться ошибкой. Хотя можно вручную проверять и выбрасывать исключения, Laravel поставляется с удобными хелперами, позволяющими делать именно это 🚀.

📱 @dev_notes_ru

#Laravel #API #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Спокойное подчёркивание текста ссылки

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

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

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

📱 @dev_notes_ru

#Frontend #CSS
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥2👍1
💡 Совет по CSS

Заметил, что многие разработчики используют margin для добавления промежутков между элементами flexbox, особенно в меню.

Вместо margin во Flexbox можно использовать свойство gap и избежать неудобных :not(:last-child) или сброса margin на первом/последнем элементе. 😉

gap в baseeline с апреля 2021 года.

📱 @dev_notes_ru

#CSS #flexbox #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
😈 Проклятая стилизация

📱 @dev_notes_ru

#joke
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯3🤔2👍1🤣1
👩‍💻 Intl.DurationFormat: Форматирование временных интервалов с поддержкой локали

Хватит писать код форматирования временных интервалов вручную. Используйте новый мощный API Intl.DateTimeFormat для отображения локализированного времени.

Временные интервалы встречаются повсюду — видеоплееры показывают оставшееся время, фитнес-приложения отслеживают продолжительность тренировок, а инструменты управления проектами измеряют время выполнения задач. Традиционно для форматирования этих значений в разных локалях требовался собственный код или внешние библиотеки.

Объект Intl.DurationFormat элегантно решает данную проблему. Он является частью основной спецификации языка ECMAScript — в частности, ECMAScript Internationalization API (ECMA-402). Это делает его нативной функцией JavaScript, а не API веб-браузера, хотя браузерная реализация определяет его доступность.

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

📱 @dev_notes_ru

#JavaScript
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
👩‍💻 Laravel: Запуск запланированных команд в режиме обслуживания!

При использовании php artisan down --secret="your-secret", Laravel блокирует все запросы, включая запланированные команды (schedule).

Проблема:
Если есть запланированная задача в app/Console/Kernel.php, например, создание резервной копии:

$schedule->command('backup:run')
->dailyAt('03:00');


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

Решение:
Добавьте evenInMaintenanceMode(), чтобы команда выполнялась, даже когда активен режим обслуживания:

$schedule->command('backup:run')
->dailyAt('03:00')
->evenInMaintenanceMode();


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

📱 @dev_notes_ru

#Laravel #Schedule #Maintenance #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
👩‍💻 Вы можете использовать метод Number::fileSize в приложениях Laravel для преобразования размеров файлов (в байтах) в более человекочитаемые представления!

Это удобно для отображения размеров файлов в пользовательском интерфейсе.

📱 @dev_notes_ru

#Laravel #Number #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
👩‍💻 Паттерны улучшения производительности Eloquent

Способы улучшения производительности баз данных для приложений Laravel с использованием ORM Eloquent.

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

📱 @dev_notes_ru

#Eloquent #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥21
👩‍💻 А вы знали, что в приложениях Laravel можно получить список маршрутов, зарегистрированных пакетами?

Его можно получить, выполнив команду:

php artisan route:list --only-vendor


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

📱 @dev_notes_ru

#Laravel #Route #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
👩‍💻 Что можно сделать с помощью middleware в Laravel

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

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

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

📱 @dev_notes_ru

#Laravel #Middleware
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
💡 Совет по Laravel: Привязка примитивов к значениям конфигурации

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

📱 @dev_notes_ru

#Laravel #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
🚀 Оптимизация 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Из параллельной вселенной

📱 @dev_notes_ru

#joke
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4😁2🤣2
👩‍💻 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
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍1
👩‍💻 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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥52👍2🤨1