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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
#junior

Введение в тему внедрения зависимостей для начинающих.

https://afilina.com/learn/design/dependency-injection
👍3
#legacy

Анне Филине достался очередной легаси проект. С некоторыми перлами она поделилась в треде. Например, try..catch блок, который все равно падает с ошибкой, потому что в catch блоке используется переменная из try, которой ещё не присвоено значение. Больше интересных ошибок в треде.

https://twitter.com/afilina/status/1288126813303001094
👍1
#laravel

Релиз минорной версии Laravel с интересными фичами:
- Реализация полнотекстового поиска для MySQL и PostgreSQL;
- Улучшения пагинатора;
- Улучшения контейнера зависимостей.

Больше информации и примеров использования в статье.
👍3🔥2
#laravel

Если вы используете Laravel версии ниже, чем 8.4.2, то вы подвержены серьёзной уязвимости. Подробнее в статье. Не забудьте обновиться.
👍3😁1
#psalm

Как использовать Psalm на легаси проекте

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

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

Глобально подавлять ошибки — это однозначно плохой способ, так как повлияет и на новый код.

Конфиг

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

<psalm>
....
<projectFiles>
<directory name="src"/>
<ignoreFiles>
<directory name="src/Module1"/>
<directory name="src/Module2"/>
<directory name="src/Module3"/>
</ignoreFiles>
</projectFiles>
....
</psalm>


Этот способ имеет ещё один недостаток: наверняка вы до сих пор что-то правите в этих модулях, и тогда ваш новый код в старых модулях тоже не будет проанализирован псалмом. Но вы же не этого добивались?

psalm-baseline

У псалма есть решение для таких случаев — baseline. Данный способ найдёт и сохранит все текущие ошибки в конкретный xml файл и будет их игнорировать при анализе. Также вам не придётся игнорировать директории и глобально подавлять ошибки. Зато новый код в любых директориях — новых и старых — будет успешно проанализирован псалмом. Чтобы настроить baseline, вам необходимо выполнить следующую команду в вашем проекте:

./vendor/bin/psalm --set-baseline=psalm-baseline.xml


У вас в проекте появится psalm-baseline.xml файл, который необходимо закоммитить. Теперь вы сможете спокойно использовать psalm в CI. Только не забывайте в свободное время править ошибки в старых модулях. Когда вы поправите часть из них, обновите baseline:

./vendor/bin/psalm --update-baseline


И так до тех пор, пока вы не избавитесь от всех ошибок, либо не удалите модули, заменив их новыми 😎.
👍17🔥5
#symfony

Основная беда Symfony – она предоставляет богатые возможности для решения многочисленных сложных проблем, но с помощью нее сложно решать простые задачи. Например, возьмем миддлвары. Достаточно простой и удобный механизм, упрощающий написание http-обработчиков. Для миддлвар даже придумали стандарт в php-fig.

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

В Laravel, например, есть миддлвары, хоть и не следующие стандарту psr-15. Можно ли такое сделать в Symfony? Оказывается, можно. Есть такой пакет, который реализует psr-15 и дает возможность использовать как глобальные миддлвары, так и миддлвары конкретно для контроллера.

Следование стандарту позволяет вам поставить любую известную вам миддлвару и использовать ее вместе с этим пакетом. Он (пакет) перехватывает событие ControllerArgumentsEvent, на этапе которого уже известен и контроллер, и его аргументы. Пакет проверяет, нужно ли запускать какие-то миддлвары – глобальыне и/или локальные – и запускает их до выполнения контроллера.

Преимущества по сравнению с событиями:
- Следование стандарту psr-15;
- Возможность объединять миддлвары в группы;
- Возможность точечно поставить миддлвары над конкретным контроллером;
- Возможность из коробки запускать миддлвары в зависимости от условия (например, в дебаг режиме запустить миддлвару, включающую логирование sql запросов, а в прод режиме – не запускать).

Также автор собирается добавить поддержку аргументов в миддлварах, чтобы можно было динамически указывать специфические для каждого из контроллеров аргументы.
👍13🔥5💩32
#advanced

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

https://downing.tech/posts/overriding-vendor-classes
SQL Performance Explained.pdf
1.2 MB
#advacned #sql

Мастрид для разработчиков, которые хотят усовершенствовать навыки при работе с SQL. Книга покрывает обзор множества известных БД.
👍10
#advanced #phpstan

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

https://github.com/staabm/phpstan-dba
🔥9
Кто что использует для трейсинга в PHP приложениях?
Anonymous Poll
33%
jaegertracing
31%
opentracing
39%
Свой вариант (напишу в комментариях(
Какие знания нужны, чтобы стать тимлидом?

AGIMA и GeekBrains ответят на этот вопрос в рамках нового потока курса для будущих тимлидов. Здесь вы узнаете, как:

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

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

Регистрируйтесь по ссылке: https://clck.ru/ZRtj3
Простой рабочий алгоритм использования SOLID на практике

Зачем нужны SOLID принципы? Что нужно сделать с множеством сущностей, чтобы код удовлетворял DIP?

🚀Расскажет завтра Евгений Тюменцев, профессионально занимающийся разработкой многопоточных кросс-платформенных приложений на С++, Директор компании по разработке программного обеспечения «Hello World! Technologies».

🚀Всем участникам будет доступна запись вебинара и презентация спикера. Главное, чтобы вы были зарегистрированы на сайте.
👍4👎4
Простой алгоритм использования SOLID на практике

Зачем нужны SOLID принципы? Что нужно сделать с множеством сущностей, чтобы код удовлетворял DIP?

Рассказывает Евгений Тюменцев, профессионально занимающийся разработкой многопоточных кросс-платформенных приложений на С++, Директор компании по разработке программного обеспечения «Hello World! Technologies».

https://youtu.be/H2Lk3SQWhnc
👍1👎1