Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
11.3K subscribers
1.33K photos
19 videos
26 files
4.01K links
Все самое полезное для пхпшника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/bca892d6

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
Что такое DDD?

DDD, или Domain-Driven Design (Проектирование с учетом предметной области) — это методология разработки программного обеспечения, которая сосредотачивается на моделировании бизнес-процессов и бизнес-логики в предметной области приложения. Она была предложена Эриком Эвансом в его книге «Domain-Driven Design: Tackling Complexity in the Heart of Software» и предоставляет набор практик и шаблонов для разработки сложных систем.

Основные концепции DDD включают:

Предметная область (Domain):
Предметная область — это ключевой компонент DDD. Это область, на которую направлена разработка, и она описывает бизнес-процессы, правила и логику приложения.

Эксперты предметной области (Domain Experts):
Эксперты предметной области — это люди, обладающие экспертными знаниями в конкретной области бизнеса. В DDD активно взаимодействуют с разработчиками, помогая им понимать сложности предметной области.

Сущности (Entities) и Значения (Value Objects):
Сущности представляют объекты, имеющие уникальный идентификатор, который определяет их в предметной области. Значения — это объекты, описывающие характеристики, которые не имеют своего идентификатора и сравниваются по значению.

Агрегаты (Aggregates):
Агрегаты — это группы связанных сущностей и значений, образующие логически связанные единицы. Агрегаты имеют корень (главную сущность) и инварианты (правила, которые должны соблюдаться внутри агрегата).

Репозитории (Repositories):
Репозитории предоставляют интерфейс для работы с агрегатами и предоставляют методы для поиска и сохранения данных в предметной области.

Сервисы приложения (Application Services) и Фабрики (Factories):
Сервисы приложения — это слой, предоставляющий операции, доступные извне приложения. Фабрики создают сложные объекты, облегчая их создание и инициализацию.

#вопросы_с_собеседований
👍3🔥3😁3🥱31
Что выведет следующий код?
Что выведет следующий код?
Anonymous Quiz
47%
012
34%
000
7%
123
13%
Ошибку
🏃‍♀️ 40+ каналов, которые должен читать каждый разработчик

Отобрали для вас полезные и проверенные каналы для программистов — в них вы найдете все самое интересное, от технических новостей до практических гайдов.

IT Job Hub | Работа и вакансии в IT — избранные IT-вакансии

Библиотека программиста — новости из мира IT и технологий

Книги для программистов — самые годные книги по любым языкам и стекам

IT-мемы — мемы про жизу айтишника

Proglib Academy — обучение и курсы, чтобы стать топовым специалистом

Азбука айтишника — азы из мира разработки

Библиотека нейросетей — лайфхаки и промпты для разных задач, баттлы нейронок и новости из мира ИИ

Библиотека фронтендера — все о JS, React, Angular и не только

Библиотека мобильного разработчика — лайфхаки и новости из мира Swift и Kotlin

Библиотека хакера — уязвимости, атаки, бэкдоры и как от них защититься

Библиотека тестировщика — самое интересное о том, как крашить код

🦫 Go
Библиотека Go-разработчика
Библиотека задач по Go
Библиотека Go для собеса
Вакансии по Go

#️⃣ C#
Библиотека шарписта
Библиотека задач по C#
Библиотека собеса по C#
Вакансии по C#

🔧 DevOps
Библиотека devops’а
Библиотека задач по DevOps
Библиотека собеса по DevOps
Вакансии по DevOps & SRE

🐘 PHP
Библиотека пхпшника
Библиотека задач по PHP
Библиотека PHP для собеса
Вакансии по PHP, Symfony, Laravel

🐍 Python
Библиотека питониста
Библиотека Python для собеса
Библиотека задач по Python
Вакансии по питону, Django, Flask

☕️ Java
Библиотека джависта
Библиотека задач по Java
Библиотека Java для собеса
Вакансии по Java

📊 Data Science
Библиотека дата-сайентиста
Библиотека задач по Data Science
Библиотека Data Science для собеса
Вакансии по Data Science

🎮 C++
Библиотека C/C++ разработчика
Библиотека задач по C++
Библиотека C++ для собеса
Вакансии по C++

Подписывайтесь на интересные вам каналы и сохраняйте пост в закладки, чтобы не потерять 🔑
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51
⚙️ Laravel 12: Новые возможности и улучшения

Что нового

Laravel 12 представляет ряд значительных обновлений, направленных на улучшение производительности и удобства разработки:

🔸Новые Starter Kits: Внедрены стартовые наборы с поддержкой Vue, React и Livewire, основанные на компонентах библиотеки shadcn/ui. Это упрощает интеграцию популярных фронтенд-фреймворков в проекты на Laravel.

🔸Обновления зависимостей: Удалена поддержка Carbon 2; теперь требуется Carbon 3. Также необходимо обновить Laravel Installer для поддержки Laravel 12 и новых стартовых наборов.

🔸Улучшенный Query Builder: Введен более гибкий синтаксис для построения сложных запросов, улучшена поддержка подзапросов и драйверов баз данных, что повышает производительность и совместимость с новыми версиями СУБД.

🔸Расширенная разработка API: Улучшены инструменты для создания и управления документацией API, поддержка версионирования и гибкие механизмы ограничения скорости, что делает разработку API более надежной и эффективной.

Как начать

1. Обновите зависимости: Убедитесь, что используете Carbon 3 и обновленный Laravel Installer.

2. Выберите Starter Kit: Определите, какой из новых стартовых наборов (Vue, React, Livewire) лучше подходит для вашего проекта.

3. Изучите обновления: Ознакомьтесь с улучшениями в Query Builder и возможностями разработки API для эффективного использования новых функций.

Где применять

🔹 Проекты с современным фронтендом: Интеграция с Vue, React и Livewire упрощает создание динамичных интерфейсов.

🔹 Сложные API: Расширенные возможности разработки и управления API делают Laravel 12 отличным выбором для проектов с обширной серверной логикой.

🔹 Производительные приложения: Улучшения в Query Builder и поддержка современных СУБД способствуют повышению производительности.

👉 Читать статью

💬 Уже установили 12 версию? Как вам?

Библиотека пхпшника #буст
😁6
Автоматизация анонимизации в Symfony

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

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

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

Проблемы:
🔹 Различные версии PHP и фреймворков в приложениях.
🔹 Несогласованность структур баз данных (например, поля "имя" могли называться по-разному).
🔹 Множественные таблицы с данными пользователей.
🔹 Необходимость единого подхода при разнообразных архитектурах приложений.

Решение:
Создан Symfony-бандл, устанавливаемый в каждое приложение, предоставляющий необходимые функции анонимизации. При установке бандла создаётся таблица для хранения запросов на анонимизацию. Добавляются два маршрута:

🔸 Search GET – поиск пользователя в базе данных по заданным параметрам.
🔸 Anonymize POST – создание записи запроса на анонимизацию для указанного пользователя.

Для определения, в каких сущностях и свойствах выполнять поиск и анонимизацию, используются атрибуты:

🔹 Search – определяет, какие поля использовать для фильтрации и форматирования вывода.
🔹 Anonymize – применяется к полям, требующим анонимизации, с указанием типа и значения замены.

Анонимизация коллекций осуществляется рекурсивно для всех элементов.

Запросы на анонимизацию обрабатываются асинхронно с помощью команды cron, которая проверяет и выполняет их.

Единый интерфейс:

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

Автоматическая анонимизация:
🔹 Введён атрибут AutomaticAnonymization, применяемый к основному классу пользователя в каждом приложении.
🔹 Он указывает поле с датой последнего обновления.
🔹 Ежедневно запускается команда, анализирующая пользователей, не обновлявшихся более трёх лет, и создающая для них запросы на анонимизацию.

Ограничения:
🔸 При работе с приложениями на PHP 7.4, не поддерживающими атрибуты, использовались аннотации.
🔸 Для предотвращения перегрузки базы данных ограничены партии анонимизации до 1000 записей за запуск.
🔸 Реализован механизм резервного копирования: оригинальные данные сохраняются в зашифрованном виде и автоматически удаляются через месяц.

🔗 Medium

Библиотека пхпшника
👍2
🔧 CLI-лайфхак: Быстрое развертывание локального веб-сервера с помощью встроенного сервера PHP

Если вам нужно быстро протестировать или продемонстрировать свой код, нет необходимости устанавливать сложные веб-серверы. PHP предоставляет встроенный сервер, который можно запустить одной командой в терминале! 🖥️

Как это сделать?

1. Откройте терминал на вашем компьютере.

2. Перейдите в директорию вашего проекта с помощью команды cd /путь/к/вашему/проекту.

3. Запустите встроенный сервер, выполнив следующую команду:
php -S localhost:8000


Здесь localhost — адрес сервера, а 8000 — порт, на котором он будет работать. Вы можете изменить порт на любой другой, если 8000 уже занят.

4. Откройте браузер и перейдите по адресу https://localhost:8000. Теперь ваш проект доступен для просмотра и тестирования! 🌐

Почему это удобно?

🔸 Быстрота и простота: не требуется установка и настройка дополнительных серверов, таких как Apache или Nginx.

🔸 Мобильность: работает на любой системе с установленным PHP.

🔸 Идеально для разработки и тестирования: позволяет мгновенно увидеть изменения в коде.

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

Библиотека пхпшника #буст
😁10👍3🤔1
Гайд по документированию запросов API с помощью Scramble

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

🔸 Автоматическая генерация

Scramble анализирует код и создает документацию на основе правил валидации, параметров маршрутов и обращений к $request. Например, параметры пути определяются по типу модели: integer или uuid.

🔹 Дополнение документации
К автоматически созданной структуре можно добавить описания, примеры и значения по умолчанию. Если Scramble пропустил параметр или его тип указан неверно, это легко исправить вручную.

🔸 Документирование заголовков, куки и параметров

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

🔹 Общие параметры для всех эндпоинтов

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

🔸 Аутентификация и безопасность
Документировать механизм авторизации можно с помощью трансформеров, а публичные эндпоинты помечать как не требующие аутентификации. Также Scramble позволяет автоматически убирать требование аутентификации для маршрутов без auth-middleware.

🔹 Группировка и сортировка эндпоинтов
Для удобства документацию можно разделять на группы и управлять их порядком, добавляя соответствующие метки.

👉Читать статью

Библиотека пхпшника
👍3
Куда расти PHP-разработчику

Наш подписчик задал нам вопрос:
«Я PHP-разработчик с опытом 1,5 года. Но ощущаю, что топчусь на месте. Какие навыки стоит развивать, чтобы через год-два вырасти до сеньора или даже тимлида? Углубляться в фреймворки или лучше прокачивать soft skills?»

Алексей, PHP Developer

Опытные разработчики, что посоветуете Алексею? Автор самого полезного и детального ответа получит вечную славу и уважение коллег 🫡

💬 Делитесь в комментариях:

— Какие технические навыки необходимы для роста в PHP
— Насколько важны фреймворки и архитектура для карьерного роста
— Какие soft skills действительно ценят компании
— Ваши истории успеха

P.S. Если хотите задать вопрос, заполните нашу гугл-форму. Это займет 5 минут.

Библиотека пхпшника #междусобойчик
😁11
🤩 Полная коллекция доков от команды Honeypot про различные популярные ЯП, технологии, библиотеки, фреймворки и инструменты:

📺 Node.js
📺 Ruby on Rails
📺 React.js
📺 Prometheus
📺 Kubernetes: часть 1 & часть 2
📺 Vue.js
📺 GraphQL
📺 Elixir
📺 Ember.js
📺 Angular

Библиотека пхпшника #буст
🤩3👍2
📉🤦 152 000 уволенных в IT за год: кому это помогло?

Корпоративная бензопила снова в деле: каждый месяц 2 миллиона американцев теряют работу из-за сокращений. Но действительно ли это помогает компаниям?

🔗 Читать статью
👍5
Кастомные правила PHPStan для улучшения проектов Symfony

Использование PHPStan помогает улучшить качество PHP-кода, особенно в проектах на Symfony, Doctrine и Laravel. Однако для обеспечения долговечности проекта необходимо внедрять дополнительные правила статического анализа. Это включает в себя высокое покрытие типами, качественное тестирование и автоматическое применение правил через CI.

A. Правила для ясного внедрения зависимостей

NoRequiredOutsideClassRule: Запрещает использование атрибута #[Required] в трейтах, чтобы избежать сильной связности и сложночитаемого кода. Рекомендуется использовать явное внедрение через конструктор.

NoAbstractControllerConstructorRule: Абстрактные контроллеры не должны иметь конструкторы, чтобы избежать жесткой связности и сложностей при наследовании. Вместо этого следует использовать атрибут #[Required] для внедрения зависимостей.

NoConstructorAndRequiredTogetherRule: Запрещает одновременное использование конструктора и атрибута #[Required] в одном классе. Необходимо выбрать один способ внедрения зависимостей.

NoFindTaggedServiceIdsCallRule: Предотвращает использование метода findTaggedServiceIds(), предлагая вместо этого использовать автоконфигурацию через атрибуты или теги в конфигурации.

NoGetInControllerRule: Запрещает использование метода $this->get() в контроллерах, поощряя внедрение зависимостей через конструктор.

B. Унификация маршрутизации

NoRoutingPrefixRule: Избегает использования префиксов в маршрутах, чтобы обеспечить прозрачность и единообразие определения путей.

NoClassLevelRouteRule: Предотвращает использование маршрутов на уровне класса, предлагая определять пути непосредственно в атрибутах методов для лучшей читаемости и поддержки.

C. Подписчики событий

NoListenerWithoutContractRule: Поощряет использование интерфейса EventSubscriberInterface вместо слушателей, чтобы хранить метаданные внутри класса и уменьшить объем конфигурации.

NoStringInGetSubscribedEventsRule: Требует использования ссылок на классы событий в методе getSubscribedEvents(), что облегчает обновление и улучшает поддержку IDE.

👉Читать статью
🔥62
😧 58% IT-специалистов страдают: психология успеха и борьба с синдромом самозванца

Синдром самозванца — не просто модный термин, а реальная проблема, с которой сталкиваются даже опытные разработчики. Почему так происходит и как с этим бороться? Разбираемся в причинах «стандартной болезни айтишников»

➡️ Читайте в статье

Спойлер: дело не в навыках, а в психологии успеха

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
👾2
Эксперт или универсал: Какой путь выбрать

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

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

Разбираем плюсы, минусы и подводные камни каждого пути.

Путь эксперта

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

Плюсы:
✓ Высокий спрос на рынке для редких экспертов.
✓ Возможность стать ментором, архитектором, техлидом.
✓ Возможность делать революционные вещи в узкой области.

Минусы:
— Высокий порог входа: чтобы стать экспертом, нужны годы практики.
— Узкая специализация = риски (если технология потеряет актуальность).
— Иногда скучно: одно и то же из года в год.

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

Путь универсала

Ты не привязываешься к одной технологии и легко прыгаешь между разными стекми. Сегодня фронтенд, завтра DevOps, послезавтра AI — ты всегда готов учиться новому.

Плюсы:
✓ Легче адаптироваться к новым трендам и рынку.
✓ Возможность работать в разных областях.
✓ Больше шансов занять менеджерские позиции.
✓ Можно быть разработчиком-одиночкой (фриланс, стартапы, консалтинг).

Минусы:
— Поверхностные знания = не всегда высокая зарплата.
— Риски синдрома «немного знаю обо всём, но нигде не силён».
— Постоянная учёба: новые фреймворки, языки, подходы... устаёшь от потока информации.

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

Давайте обсудим в комментариях какой путь выбрали вы или хотели бы выбрать 👇

#междусобойчик
👍5
💻 Подборка новостей по PHP за неделю:

🔎 Релиз-кандидат CakePHP 5.2.0-RC1
В этой версии представлены улучшения, такие как команда cake counter_cache для регенерации счетчиков моделей с использованием CounterCacheBehavior, метод ConsoleIntegrationTestTrait::debugOutput() для упрощения отладки интеграционных тестов консольных команд и поддержка опции separator для консольных аргументов и опций, что позволяет определять параметры, например, как --names=foo,bar

🔎 Релиз Laravel MongoDB 5.2
Команда MongoDB выпустила версию 5.2.0 интеграции MongoDB для Laravel. Это обновление включает поддержку Laravel 12, интеграцию с Laravel Scout и возможности векторного поиска.

🔎 Временная область контекста в Laravel 12.1
Команда Laravel выпустила версию 12.1.0 — первое минорное обновление Laravel 12, которое включает метод context scope, метод Arr::partition(), метод getRawSql() для экземпляров исключений запросов и другие улучшения.

🔎 Неделя Symfony #949 (3–9 марта 2025 года)

Библиотека пхпшника #свежак
🥰1
🔹 PHP разбор: что использовать и когда? 🔹

Сегодня сравним isset() vs empty() vs is_null() — функции для проверки переменных в PHP. Когда какую применять? 🤔

isset($var) — Проверяет, существует ли переменная и не равна ли она null.
🔹 isset($var)false, если $var = null; или переменная не объявлена.
🔹 isset($var) → true, если $var = «», 0, false, [], но НЕ null.

empty($var) — Проверяет, считается ли переменная «пустой» (falsey значением).
🔹 empty($var)true, если $var = «», 0, false, null, [], «0».
🔹 empty($var) → false, если $var = «abc», 123, [1,2,3].

is_null($var) — Проверяет, является ли переменная строго null.
🔹 is_null($var)true, только если $var = null.
🔹 is_null($var)false, если $var существует и имеет любое другое значение (даже «», 0, false).

📌 Когда что использовать?
🔹 isset($var) → Проверяем, существует ли переменная.
🔹 empty($var) → Проверяем, «пустая» ли она (falsey).
🔹 is_null($var) → Проверяем, является ли null.

✍️ А какую функцию вы чаще используете в своих проектах?

Библиотека пхпшника #буст
👍16🥱2
🐘 Глубокое погружение в экосистему PHP

Статья представляет собой подробный анализ качества кода в экосистеме PHP. Автор загрузил 236 ГБ Git-репозиториев, содержащих 2,3 миллиарда строк кода, и проанализировал 11,1 миллиона PHP-файлов, чтобы получить представление о состоянии экосистемы.

Основные заключения статьи:

🔸Модульность и лаконичность: 36% файлов содержат менее 100 строк кода, что свидетельствует о предпочтении небольших и сфокусированных реализаций. Широкое использование интерфейсов (3,7 млн интерфейсов против 7,4 млн классов) способствует высокой модульности экосистемы.

🔸Сложность кода: 76,5% файлов имеют низкую цикломатическую сложность (0-10), однако 23,5% кода обладают высокой сложностью, что может затруднять поддержку.

🔸Зависимость от небольшого числа пакетов: Всего 136 пакетов (0,05% от общего числа) составляют более половины всех загрузок в экосистеме. Хотя эти ключевые библиотеки хорошо поддерживаются, такая концентрация создает риски, связанные с зависимостью.

🔸«Теневая инфраструктура»: Некоторые широко используемые пакеты имеют низкую популярность (мало звезд на GitHub), что указывает на то, что критически важные зависимости могут поддерживаться очень небольшими командами.

🔸Состояние экосистемы: Хотя экосистема PHP в целом здорова, 70% пакетов показывают минимальную активность, а 23% кажутся заброшенными, что делает аудит зависимостей необходимым.

👉 Читать статью

Библиотека пхпшника
🔥8👍3
♻️ Повторное выполнение одновременных запросов

В Laravel версий 10 и ниже повторное выполнение неудачных одновременных запросов было невозможным. И что же? В Laravel 11 это возможно! 🚀

Библиотека пхпшника
👍11👾1
Media is too big
VIEW IN TELEGRAM
🧑‍💻 Какой язык программирования учить в 2025 году

Proglib рассказывает базу в формате рилса
Please open Telegram to view this post
VIEW IN TELEGRAM
😁13🥱7