uk
Feedback

Не попадись на ботовода! Telemetrio знаходить і позначає такі канали мітками 👉 Хочеш бачити мітку, оформляй підписку

Библиотека PHP программиста 👨🏼‍💻👩‍💻

Библиотека PHP программиста 👨🏼‍💻👩‍💻

Відкрити в Telegram

Полезные материалы по PHP, Laravel, Symfony, CodeIgniter, CakePHP, Phalcon По всем вопросам @evgenycarter

Показати більше
2 040
Підписники
-224 години
-87 днів
-1730 днів
Архів дописів
Совет по Laravel 💡 Один из моих любимых недокументированных советов, который я регулярно использую. Используйте "wasRecentlyCreated", чтобы проверить, была ли модель создана или найдена в базе данных. 📲 Мы в MAX 👉 @php_lib

Совет по PHP/Laravel 💡 Вместо того чтобы выполнять цикл `foreach` по массиву для поиска значения записи, вы можете использов
Совет по PHP/Laravel 💡 Вместо того чтобы выполнять цикл `foreach` по массиву для поиска значения записи, вы можете использовать метод Laravel Collection `contains()`. 📲 Мы в MAX 👉 @php_lib

🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https://max.ru/bash_srv Bash Советы https://max.ru/sysadminof Книги для админов, полезные материалы https://max.ru/i_odmin_book Библиотека Системного Администратора https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др. 1C разработка 📌 https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С Программирование C++📌 https://max.ru/cpp_lib Библиотека C/C++ разработчика Программирование Python 📌 https://max.ru/python_of Python академия. https://max.ru/BookPython Библиотека Python разработчика Java разработка 📌 https://max.ru/bookjava Библиотека Java разработчика GitHub Сообщество 📌 https://max.ru/githublib Интересное из GitHub Базы данных (Data Base) 📌 https://max.ru/database_info Все про базы данных Фронтенд разработка 📌 https://max.ru/frontend_1 Подборки для frontend разработчиков Библиотеки 📌 https://max.ru/programmist_of Книги по программированию https://max.ru/proglb Библиотека программиста https://max.ru/bfbook Книги для программистов Программирование 📌 https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT https://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 Шутки программистов 📌 https://max.ru/itumor Шутки программистов Защита, взлом, безопасность 📌 https://max.ru/thehaking Канал о кибербезопасности https://max.ru/xakkep_1 Хакер Free Книги, статьи для дизайнеров 📌 https://max.ru/odesigners Статьи, книги для дизайнеров Математика 📌 https://max.ru/Pomatematike Канал по математике https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике Вакансии 📌 https://max.ru/progjob Вакансии в IT Мир технологий 📌 https://max.ru/mir_teh Канал для любознательных Бонус 📌 https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга https://max.ru/mockva_life Свежие новости Москвы

3 совета по тестированию, которые вы должны знать... источник 📲 Мы в MAX 👉 @php_lib

✨ Советы по Laravel ✨ Если вы создаете API в своем проекте: 🪐 Применяйте версионирование в самом первом релизе 🪐 Поддержива
✨ Советы по Laravel ✨ Если вы создаете API в своем проекте: 🪐 Применяйте версионирование в самом первом релизе 🪐 Поддерживайте чистоту в routes/api.php, создавая разные файлы маршрутов для каждой версии👇 🧹 Более чистый код, 📈 Лучшие результаты 📲 Мы в MAX 👉 @php_lib

🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https://max.ru/bash_srv Bash Советы https://max.ru/sysadminof Книги для админов, полезные материалы https://max.ru/i_odmin_book Библиотека Системного Администратора https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др. 1C разработка 📌 https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С Программирование C++📌 https://max.ru/cpp_lib Библиотека C/C++ разработчика Программирование Python 📌 https://max.ru/python_of Python академия. https://max.ru/BookPython Библиотека Python разработчика Java разработка 📌 https://max.ru/bookjava Библиотека Java разработчика GitHub Сообщество 📌 https://max.ru/githublib Интересное из GitHub Базы данных (Data Base) 📌 https://max.ru/database_info Все про базы данных Фронтенд разработка 📌 https://max.ru/frontend_1 Подборки для frontend разработчиков Библиотеки 📌 https://max.ru/programmist_of Книги по программированию https://max.ru/proglb Библиотека программиста https://max.ru/bfbook Книги для программистов Программирование 📌 https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT https://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 Шутки программистов 📌 https://max.ru/itumor Шутки программистов Защита, взлом, безопасность 📌 https://max.ru/thehaking Канал о кибербезопасности https://max.ru/xakkep_1 Хакер Free Книги, статьи для дизайнеров 📌 https://max.ru/odesigners Статьи, книги для дизайнеров Математика 📌 https://max.ru/Pomatematike Канал по математике https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике Вакансии 📌 https://max.ru/progjob Вакансии в IT Мир технологий 📌 https://max.ru/mir_teh Канал для любознательных Бонус 📌 https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга https://max.ru/mockva_life Свежие новости Москвы

Совет по Laravel 💡 Знаете ли вы... Во время итерации в цикле foreach внутри цикла будет доступна переменная $loop. Эта перем
Совет по Laravel 💡 Знаете ли вы... Во время итерации в цикле foreach внутри цикла будет доступна переменная $loop. Эта переменная предоставляет доступ к некоторым полезным битам информации. 📲 Мы в MAX 👉 @php_lib

Совет по Laravel 💡 Данные загружаются быстрее, если целевое значение является целым числом. Используйте 𝘄𝗵𝗲𝗿𝗲𝗜𝗻𝘁𝗲𝗴
Совет по Laravel 💡 Данные загружаются быстрее, если целевое значение является целым числом. Используйте 𝘄𝗵𝗲𝗿𝗲𝗜𝗻𝘁𝗲𝗴𝗲𝗿𝗜𝗻𝗥𝗮𝘄() вместо метода 𝘄𝗵𝗲𝗿𝗲𝗜𝗻(), чтобы быстрее загружать данные, когда целевое значение является целым числом. 📲 Мы в MAX 👉 @php_lib

Совет по Laravel 💡 Преобразуйте свои массивы в коллекции, чтобы получить доступ ко всем полезным функциям для работы с вашим
Совет по Laravel 💡 Преобразуйте свои массивы в коллекции, чтобы получить доступ ко всем полезным функциям для работы с вашими данными. 📲 Мы в MAX 👉 @php_lib

Совет по Laravel Передавайте большие файлы без задержек, используя потоки 📲 Мы в MAX 👉 @php_lib
Совет по Laravel Передавайте большие файлы без задержек, используя потоки 📲 Мы в MAX 👉 @php_lib

🚨 Совет по безопасности Livewire: Всегда выполняйте авторизацию своих действий! 🔒 Никогда не доверяйте пользовательскому вв
🚨 Совет по безопасности Livewire: Всегда выполняйте авторизацию своих действий! 🔒 Никогда не доверяйте пользовательскому вводу — всегда проверяйте права доступа перед выполнением важных операций. Если вы уже используете Gates и Policies, работа с Livewire покажется вам привычной! 🏡💪 #Laravel #Livewire 📲 Мы в MAX 👉 @php_lib

💡Советы и хитрости PhpStorm - Store Window Layout Вам не нравится адаптировать положение окон инструментов при каждом новом проекте? (например, дерево файлов слева направо). Вы можете сохранить их. 📲 Мы в MAX 👉 @php_lib

Админ vs студент: разбор тестового задания — сервис консультаций на Laravel за неделю Эта статья — подробный разбор тестового
Админ vs студент: разбор тестового задания — сервис консультаций на Laravel за неделю Эта статья — подробный разбор тестового задания на позицию PHP-разработчика, которое мне пришлось выполнить в краткие сроки из-за приближающей сессии. Я расскажу, с какими трудностями столкнулся, будучи студентом и новичком в веб-разработке, как построил архитектуру проекта «Школьные консультации» и что из этого вышло. Если вам интересен взгляд «с первоначального этапа» на классическую задачу или вы хотите узнать, чем всё кончилось, или у вас был похожий опыт (о котором вы хотели рассказать), то добро пожаловать. https://habr.com/ru/companies/ruvds/articles/983692/ 📲 Мы в MAX 👉 @php_lib

Совет по Laravel 💡 Легко обновляйте столбцы JSON с помощью синтаксиса стрелок Laravel! Используйте -> для указания конкретны
Совет по Laravel 💡 Легко обновляйте столбцы JSON с помощью синтаксиса стрелок Laravel! Используйте -> для указания конкретных ключей в ваших JSON-данных. Работает с MariaDB 10.3+, MySQL 5.7+ и PostgreSQL 9.5+. 📲 Мы в MAX 👉 @php_lib

Совет по Laravel 💡: Метод «diffInDaysFiltered» Вам когда-нибудь требовалось подсчитать количество дней между двумя датами пр
Совет по Laravel 💡: Метод «diffInDaysFiltered» Вам когда-нибудь требовалось подсчитать количество дней между двумя датами при фильтрации по условию? Поскольку Laravel использует Carbon под капотом, вы можете использовать «diffInDaysFiltered», чтобы сделать именно это 🚀. #laravel 📲 Мы в MAX 👉 @php_lib

Анемичная модель vs Богатая модель Ваши сущности, это просто "мешки для данных"? Типичная ошибка (Anemic Domain Model): У вас есть Entity Order, в которой только геттеры и сеттеры. А вся логика лежит в гигантском OrderService на 2000 строк. ❌ Как это выглядит (Анемия):

// Service
$order->setStatus('paid');
$order->setUpdatedAt(new DateTime());
// А вдруг забыли отправить ивент?
// А можно ли менять статус на 'paid', если сумма 0? 
// Сервис должен всё помнить.
$repo->save($order);

✅ Как должно быть (Rich Model): Переносим бизнес-логику внутрь сущности. Принцип "Tell, Don't Ask" (Говори, а не спрашивай).

class Order 
{
    // Свойства приватны! Извне их менять нельзя.
    private string $status;
    private array $items = [];

    public function pay(Payment $payment): void 
    {
        if ($this->status === 'paid') {
             throw new DomainException("Order already paid");
        }
        
        if ($payment->amount < $this->getTotal()) {
             throw new DomainException("Not enough money");
        }

        $this->status = 'paid';
        $this->recordEvent(new OrderPaid($this->id));
    }
}

// Service становится тонким и скучным (и это хорошо!):
$order->pay($payment);
$repo->save($order);

Суть: Сущность сама следит за своими инвариантами (правилами). Вы физически не можете перевести её в некорректное состояние. Сервисы просто дирижируют процессом, но не знают деталей бизнес-правил. Где сейчас живет ваша логика? В сервисах или в моделях? #ddd #architecture #oop #refactoring 📲 Мы в MAX 👉 @php_lib

Value Objects (Объекты-значения) - самый быстрый выигрыш Хватит страдать от «Primitive Obsession»! В большинстве легаси-проектов я вижу такое: function register(string $email, string $phone, float $amount) Что тут не так? 1. string $email - это просто набор байт. Там может быть "asdf", и PHP это проглотит. 2. Валидация размазана по контроллерам и сервисам. 3. Логика (например, форматирование телефона) дублируется. ✅ Внедряем Value Object:

readonly class Email 
{
    public string $value;

    public function __construct(string $value) 
    {
        if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
            throw new InvalidArgumentException("Invalid email format");
        }
        $this->value = strtolower($value); // Нормализация
    }
    
    public function getDomain(): string 
    {
        return explode('@', $this->value)[1];
    }
}

// Теперь сигнатура метода говорит правду:
function register(Email $email, Phone $phone, Money $amount) { ... }

В чем профит: 💜Гарантия: Если у тебя в руках объект Email, он 100% валиден. Не надо проверять это снова. 💜Инкапсуляция: Логика живет внутри класса, а не в Helper::formatPhone(). 💜Immutability: Value Object нельзя изменить, можно только создать новый. Это спасает от сайд-эффектов. Совет: Начните внедрение DDD именно с Value Objects (Деньги, Координаты, Email, SKU). Это дешево и сразу чистит код. Напишите в комментах, для чего вы уже используете VO? 👇 #ddd #valueobjects #refactoring #php82 📲 Мы в MAX 👉 @php_lib

Когда DDD вам НЕ нужен (и когда нужен) DDD - это не про структуру папок. Это про борьбу со сложностью. Самая большая ловушка: прочитав Эванса или Вернона, начать пихать DDD в простой CRUD. Если ваше приложение просто перекладывает JSON из запроса в базу, DDD сделает разработку в 3 раза дороже и медленнее. 🚦 Когда DDD избыточен: 💜Админки, простые CMS. 💜Микросервисы-прокси. 💜Прототипы (MVP), которые нужно выкинуть через месяц. 🔥 Когда DDD необходим: 💜Сложный бизнес-процесс: (например, расчет налога с учетом льгот, региона и фазы луны). 💜Долгоживущий проект: (вы будете поддерживать это 3+ года). 💜Важность языка: Когда менеджер говорит «списать бонус», а в коде это $user->points -= 10. Это рассинхрон, который приведет к багам. В DDD это будет $user->debitBonuses(10). Главный принцип: DDD применяется не ко всему проекту целиком, а к Core Domain (Ядру). Вспомогательные модули (отправка почты, логи) могут и должны оставаться простыми. Вывод: Не стройте "Звезду Смерти" для доставки пиццы. Сложность архитектуры должна соответствовать сложности бизнеса. Ставь ❤️, если видел "Hello World" на DDD с 15 интерфейсами. #ddd #architecture #php #strategy 📲 Мы в MAX 👉 @php_lib

🧑‍💻 Пишете на PHP, но всё чаще появляются задачи, где стандартного стека не хватает? Интенсивные вычисления, интеграции с нативным кодом, необходимость выжать максимум из железа — здесь в игру входят FFI и WASM. 📖 На открытом уроке поговорим о сценариях применения, типичных задачах, для которых подключают FFI или WebAssembly, и разберём реальные примеры. ❗️ Вы увидите, какие преимущества дают FFI и WASM с точки зрения производительности и гибкости и архитектуры, а также с какими рисками и ограничениями придётся считаться. Это полезно тем, кто хочет выходить за рамки классического PHP и понимать, какие инструменты есть над фреймворками. ▶️ Встречаемся 26 января в 20:00 МСК в преддверие старта курса «PHP Developer. Professional». Регистрация открыта: https://vk.cc/cTqyNa Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Индексы в PostgreSQL/MySQL. Что мы забываем? Ты добавил индекс, но запрос всё равно тормозит. Почему? База данных не всегда использует индексы так, как вы ожидаете. Вот быстрый чеклист для проверки перед деплоем миграции. 📋 Чеклист по индексам: 1. Cardianlity (Селективность): Индекс по полю gender (M / F) почти бесполезен. Базе проще прочитать всю таблицу (Full Scan), чем прыгать по индексу, который отсеет всего 50% записей. 2. Порядок в составном индексе: Правило «слева направо». 💜Индекс (group_id, status) сработает для WHERE group_id = 5. 💜Но НЕ сработает эффективно для WHERE status = active. 3. Функции убивают индекс: 💜WHERE YEAR(created_at) = 2026 - индекс по created_at игнорируется. 💜WHERE created_at >= '2026-01-01' - индекс работает. 4. LIKE с процентом в начале: 💜LIKE '%text' - Full Scan. Индекс бесполезен. 💜LIKE 'text%' - Range Scan. Индекс работает. 5. Типы данных: Сравнение строки с числом (неявное приведение) может отключить использование индекса. Совет: Всегда делайте EXPLAIN (или EXPLAIN ANALYZE) на сложных запросах перед выкаткой. Доверяй, но проверяй. #database #sql #optimization #mysql #postgres 📲 Мы в MAX 👉 @php_lib