Telegram Web
💡 Предварительный просмотр почтовых отправлений

При работе с почтовыми файлами мы часто отправляем их в MailHog или Mailtrap, чтобы быстро просмотреть отрисованное письмо. Знаете ли вы, что Laravel позволяет просматривать письма в браузере, как если бы это были обычные файлы Blade? 🚀

#совет
👍11
🤔 Прекратите использовать псевдотипы

PHP использует псевдотипы callable и iterable для удобной валидации данных, но они не являются полноценными типами, как string или array.

Callable появился в PHP 5.4 и объединяет замыкания, строки и массивы, ссылающиеся на функции. Он удобен, но создаёт сложности при статическом анализе, так как строка может содержать несуществующую функцию.

Iterable, введённый в PHP 7.1, проверяет, является ли значение массивом или реализует интерфейс Traversable. В PHP 8.2 он перестал быть псевдотипом и теперь представляет собой объединение двух типов. Его использование может вызвать ошибки, если, например, массив заменяется генератором, что делает невозможным прямой доступ по индексу.

Псевдотипы удобны, но их использование может затруднить анализ кода и привести к неожиданным ошибкам. Вместо callable лучше использовать Closure, а iterable заменять конкретными типами (array или Iterator) для большей предсказуемости.

💬Читать подробнее
👍4🤔3🌚2
Какой метод принимает имя класса или ссылку на объект и возвращает массив имен интерфейсов, которые он реализует?
Anonymous Quiz
68%
class_implements()
4%
is_subclass()
3%
is_subclass_of()
25%
class_interface()
TwigStan — статический анализатор для Twig'а

Это статический анализатор для шаблонов Twig, основанный на PHPStan. Он предназначен для выявления ошибок в шаблонах Twig на этапе разработки, что способствует повышению качества и надежности кода. Инструмент компилирует шаблоны Twig в PHP-код, оптимизирует его для лучшего анализа и сообщает об ошибках, указывая исходный шаблон и номер строки, где возникла проблема.

Обратите внимание, что проект находится на экспериментальной стадии

🔗Github

#инструменты
👍81🔥1
Какова цель «Gii» в Yii2?

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

Возможности Gii в Yii2:
🔸Ускоряет разработку:
Автоматически генерирует шаблонный код, сокращая рутинные задачи.

🔸Создает модели из базы данных:
Генерирует Active Record модели, анализируя структуру базы данных.

🔸Генерирует CRUD (Создание, Чтение, Обновление, Удаление):
Создает контроллеры, представления и модели для работы с данными.

🔸Уменьшает вероятность ошибок:
Обеспечивает единообразие и правильный синтаксис в сгенерированном коде.

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

🔸Расширяет функциональность:
Позволяет создавать собственные шаблоны кода для повторного использования.

Как использовать Gii в Yii2

1. Включите Gii в config/web.php:

'modules' => [ 'gii' => [ 'class' => 'yii\gii\Module', ],],


2. Откройте Gii в браузере:
http://your-app-url/index.php?r=gii

3. Выберите нужный генератор (Модель, CRUD, Контроллер и т. д.), введите данные и создайте код.

Использование в командной строке
Gii можно запускать через консоль Yii2:
php yii gii/model --tableName=your_table_namephp yii gii/crud --modelClass=app\models\YourModel --controllerClass=app\controllers\YourController
🥱8👍4😁1
🚀 Laravel 12 — новые возможности и улучшения

Laravel 12 выходит уже совсем скоро! Официальная дата релиза — 24 февраля 2025 года, и он получит много новых мощных функций и улучшений.

В Laravel 12 появятся такие важные функции, как:
Улучшенная структура приложения — более упорядоченная и интуитивно понятная.
Усовершенствованный конструктор запросов — новая функция nestedWhere() для сложных запросов.
Улучшения в области безопасности — Более надежная проверка паролей с помощью функции secureValidate().
Улучшенная разработка API — Родной GraphQL и улучшенная версионность API.
Отладка с помощью искусственного интеллекта — решение проблем в реальном времени с помощью функции debug()->suggest().
Производительность и масштабируемость — Асинхронное кэширование и улучшенное использование PHP.
Функции реального времени — Поддержка WebSocket для уведомлений и чатов в реальном времени.
Удобные инструменты для разработчиков — Более продуманный CLI и улучшенные команды Artisan.

📢 Смотрите полный обзор здесь: 👉 Видео о новых возможностях Laravel 12
🔥21🤔8🥰1😁1
Общение с умными устройствами силами PHP

Каждый день мы сталкиваемся с более новыми и умными устройствами, управляемыми через интернет или Wi-Fi. Концепция IoT (Internet of Things) объединяет физические устройства в одну сеть для передачи данных и управления ими. И, оказывается, что интернет вещей — никакое не ограничение! Управлять устройствами в сети можно с помощью легковесного протокола MQTT.


🔗Хабр
1👍1
📚 Читаете ли вы техническую литературу, чтобы прокачать свои навыки?

❤️ — да, постоянно читаю
👍 — иногда читаю
👾 — почти не обращаюсь к книгам, получаю знания из других источников

👇 Посоветуйте в комментариях книги, которые показались вам наиболее полезными

#интерактив
👍7342👾40
💾 Новый тренажёр по SQL

Разработчик создал SQL Noir — интерактивную детективную игру, где расследования ведутся с помощью SQL-запросов.

Погружаешься в сюжет и решаешь загадки с реальными SQL-запросами.

🔗 Ссылка
👍26😁8🔥42
Вакансии «Библиотеки программиста» — ждем вас в команде!

Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов

Подробности тут

Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴

Ждем ваших откликов 👾
Как Geocodio поддерживает в актуальном состоянии 300 миллионов адресов

Geocodio поддерживает актуальность более 300 миллионов адресов с помощью собственной системы обработки данных Chop Chop.

Как обновляются адресные данные
Адреса постоянно меняются: появляются новые дома, улицы, пересматриваются границы участков. Чтобы поддерживать базу в актуальном состоянии, Geocodio использует почти 3 000 источников данных и автоматизированный конвейер обработки.

Система Chop Chop
Chop Chop — внутренняя платформа компании, построенная на Laravel и SQLite. Она управляет поступающими данными, очищает, нормализует и проверяет их. Благодаря системе очередей в Laravel Horizon данные из сотен источников обрабатываются параллельно на мощных серверах.

В системе есть визуальный редактор, позволяющий корректировать данные вручную. Для массовых исправлений используются SQL-запросы.

Этапы обработки данных
1. Получение данных — большинство источников (городские и окружные администрации) обновляются еженедельно.
2. Конвертация форматов — сырые данные приводятся к единому виду (GeoJSON).
3. Обогащение — добавляются недостающие почтовые коды, города, корректируются адресные записи.
4. Валидация — проверяются корректность номеров домов, координат и других параметров. Если качество данных низкое, они отбрасываются (до 30% записей).
5. Проверка изменений — если в новой версии есть значительные отличия, их передают на ручную проверку.

Развертывание обновлений
Каждую ночь Chop Chop собирает свежие данные в агрегированную базу SQLite. Затем тестируется геокодер, и перед развертыванием изменений их проверяет человек.

Благодаря заранее подготовленным копиям базы данных обновления разворачиваются быстро — достаточно переключить систему на новую версию.

👉Читать подробнее
👍9🥱3
🟢 Пропуск заданий при отмене пакетной обработки в Laravel

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

#совет
👍6👾3
📚 Psl — Современный, централизованный, хорошо типизированный, неблокируемый набор API

Библиотека представляет собой современную, согласованную, централизованную и строго типизированную стандартную библиотеку для PHP. Ее цель — предоставить разработчикам PHP набор неблокирующих API, которые упрощают и стандартизируют выполнение общих задач, таких как работа со строками, массивами, генерация случайных чисел и другие операции.

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

🔗Github

#инструменты
👍61
⚔️ Поздравляем защитников PHP-кода:

▪️ .env — шифровальщик главного штаба, хранит секретные данные (пока их случайно не сольют в репозиторий)

▪️ PHPUnit — разведчик-диверсант, проникает в самое сердце кода и находит баги до того, как их найдет заказчик

▪️ PDO — сапер, обезвреживающий SQL-инъекции

А какой защитник помогает вам выживать в мире PHP? Признавайтесь в комментах 👇

🎖 Отдельный орден тем, кто пережил PHP 4.
👍26🥱6🌚5🤔3
Что такое абстрактный класс и чем он отличается от интерфейса?

Абстрактный класс в PHP — это класс, на основе которого нельзя создать объект напрямую, а используется только в качестве базового для других классов. Он содержит одну или несколько абстрактных методов, которые должны быть реализованы в классах-наследниках. Абстрактные классы могут также иметь обычные методы с реализацией.

Интерфейс в PHP — это набор абстрактных методов, которые должны быть реализованы всеми классами, которые имплементируют данный интерфейс. Классы могут имплементировать несколько интерфейсов. Интерфейс не содержит переменных или реализации методов, он только определяет сигнатуры методов.

Основные отличия между абстрактным классом и интерфейсом в PHP:

1. Абстрактный класс может иметь переменные и реализацию методов, в то время как интерфейс не может.
2. Класс может наследовать только один абстрактный класс, но имплементировать несколько интерфейсов.
3. Класс, наследующий абстрактный класс, может переопределить его методы или добавить новые методы с реализацией. В случае интерфейса, класс должен реализовать все методы из интерфейса без изменений.
4. Абстрактный класс может содержать поля и методы с любым модификатором доступа, в то время как интерфейс может содержать только публичные методы.

#вопросы_с_собеседований
👍8🔥2
♾️ Решайте проблемы правильным способом: Использование инфраструктуры вместо быстрых решений

При импорте CSV-файлов в базу данных возникла проблема с обработкой дат. Для работы с датами использовалась стандартная библиотека Carbon, однако в некоторых случаях парсер вел себя неожиданно. Если дата была указана в формате месяц/день (например, 11/11), Laravel автоматически добавлял текущий год, превращая запись в 2025-11-11. Ожидаемое поведение отличалось — дата без года должна оставаться в исходном виде.

Поиск решения

Сначала были рассмотрены стандартные подходы, включая использование регулярных выражений для проверки формата даты (YYYY-MM-DD, MM/DD/YYYY и другие). Однако такой метод оказался сложным в реализации, поскольку поддержка всех возможных форматов потребовала бы значительных усилий.

Далее было изучено, как сам Laravel выполняет валидацию дат. Оказалось, что он использует две встроенные функции PHP:

date_parse() — анализирует строку и возвращает массив с разобранными данными (год, месяц, день).

checkdate() — проверяет корректность даты.
Финальное решение

Было принято решение заменить Carbon::parse() на комбинацию date_parse() и checkdate(), чтобы обработка дат стала более точной.

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

💬Читать подробнее
🥱9👍1😢1
Переход на Symfony в заскорузлом Yii2 монолите: подробный разбор

Автор сталкивается с задачей объединения двух фреймворков, чтобы новый код разрабатывался на Symfony, сохраняя при этом работоспособность и возможность доработки старого кода на Yii2.

В статье рассматриваются ключевые аспекты интеграции, такие как совместная работа роутинга, доступ к сервисам Symfony из кода Yii2 и использование ActiveRecord в новом коде. Автор делится своим опытом и объясняет, почему были выбраны определенные решения для успешного объединения двух фреймворков в одном проекте.

👉Хабр
🤔4👍2
🕵️ Использование хелперов даты в конструкторе запросов Laravel

В Laravel версии 11.42 были добавлены новые методы построителя запросов(Query Builder), позволяющие работать с относительными датами. Эти методы повышают читаемость и упрощают написание условий, связанных с датами, в ваших моделях.

Ранее, для фильтрации записей по дате, приходилось явно указывать операторы сравнения и использовать функции, такие как now(). Это могло приводить к менее читаемому и более громоздкому коду.

Новые методы, такие как whereNowOrPast, whereFuture, whereAfterToday, orWhereBeforeToday и другие, позволяют писать более лаконичный и понятный код для работы с датами. Они инкапсулируют логику сравнения дат, делая код более выразительным и легким для понимания.

👉Официальный сайт
👍5
2025/07/08 18:00:12
Back to Top
HTML Embed Code: