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

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

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

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

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

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

Например, если вы хотите получить переменную как int, вы можете сделать так:

AppSomeService:
arguments:
$timeout: '%env(int:SOME_TIMEOUT)%'


Также он может проверить файл на существование:

%env(file:PRIVATE_KEY)%


Больше процессоров можно найти тут.

Недавно нам потребовалось из строки получать массив, где каждый элемент должен быть числом. Написали свой процессор. Можно указать любой разделитель и привести к int/float:

%env(explode:dot:integer:SOME_ENV)%
%env(explode:comma:integer:SOME_ENV)%
%env(explode:dash:float:SOME_ENV)%
%env(explode:bar:SOME_ENV)% // cast to string by default.


Теперь вы можете из такой строки 435423,923592,8235823, лежащей в env, получить массив чисел или строк.
#laravelshit

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

https://github.com/laravel/ideas/issues/1088
Хотите стать IT-специалистом крупной компании? Тогда обучающий курс «Профессия Go-разработчик» для вас!

За год обучения вы:
- получите базовые знания программирования;
- научитесь разрабатывать и тестировать приложения на Golang;
- освоите принципы работы с алгоритмами поиска и сортировки;
- научитесь взаимодействовать с файловой системой.


Переходите по ссылке и регистрируйтесь. Первые 3 месяца обучения бесплатно!▶️ https://clc.am/kABWww.
#symfony #advanced

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

https://github.com/LongRunning/LongRunning
Forwarded from PHP Digest
В PHP 8.1 будут readonly свойства

https://wiki.php.net/rfc/readonly_properties_v2

Такие свойства нельзя изменить после инициализации.

Инициализировать можно только в том же скоупе, то есть в объявлении или в методе класса (можно обойти через Reflection или старый трюк с Closure::bind).

Свойства с флагом readonly должны быть типизированные, но можно использовать тип mixed.

Если readonly свойство инициализировано объектом, то иммутабельным он не становится. То есть его внутреннее состояние все еще можно изменить.
#advanced #laravel

Полезный PR от Тейлора, в котором улучшена обработка ошибок при тестировании эндпоинтов. Например, раньше при сравнении статус-кодов вы могли получить ошибку приложения, но не понять, что именно произошло, так как вы получали не полный стак-трейс.

https://github.com/laravel/framework/pull/38025
#advanced #jwt

Статья с громким названием "Почему JWT сосет?". Когда вместо jwt токенов нужно использовать обычную сессию и для чего на самом деле можно использовать jwt токены.

https://scotch.io/bar-talk/why-jwts-suck-as-session-tokens
#advanced #architecture

Большая статья, в которой рассматриваются примеры технологий и подходов при построении высоконагруженных приложений:

1. Балансировщики нагрузки;
2. SQL или NoSQL базы данных;
3. Шардинг;
4. Репликация;
5. Кэширование;
6. CDN;
7. Long-polling vs Websockets vs SSE.

https://proglib.io/w/4bc624df
#junior #howtostart

Столько времени прошло, а практически все начинающие разработчики входят в мир программирования серьёзных (или им так кажется) приложений через одно место MVC. По крайней мере, так дела обстоят с php разработчиками. А ещё они неразрывно связывают MVC с ООП, и так начинается их второй путь — на все, что можно, пишу классы. В тему интересный пост о том, почему модель-контроллер-вьюха — это глупо, и какие подходы и термины на самом деле имеют аргументированную важность в построении сколь-нибудь больших программ.

https://t.iss.one/nikitonsky_pub/116

А ваш путь тоже начинался с MVC (или, как его правильно называть применительно к вебу, ADR (action-domain-response))?
#advanced

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

https://proglib.io/w/ebd40355
Learn.Git.The.Hard.Way.pdf
4.2 MB
#advanced #book #git

Подробная книга по Git с обзором всех основных возможностей и тех возможностей, которыми вы не пользовались и о которых могли не знать. Книга для тех, кто остановился на push-pull-merge-commit.
#advanced #php81

Обзор будущей фичи php 8.1 – файберов. Что это, как работают, зачем нужны и много другой теории и практических примеров.

https://stitcher.io/blog/fibers-with-a-grain-of-salt
#advanced #book

Книга от автора популярного плагина для PhpStorm Laravel Idea про проектирование архитектур сложных веб-приложениий. В книге затрагиваются важные и популярные темы: от внедрения зависимостей до CQRS, от DDD до Event Sourcing и тестирования. В примерах кода используется фреймворк Laravel.

https://github.com/adelf/acwa_book_ru
#postgres

Медленные запросы к СУБД не всегда были медленными. Их такими сделал объём данных, который обнаружил слабые места в работе запроса: отсутствие правильных индексов, излишняя нормализация или денормализация, которые усложнили запрос и многое другое. Очень важно вовремя это обнаружить и исправить. В этом могут помочь различные утилиты, предоставляемые PostgreSQL (в данном случае): например, анализ плана выполнения запроса, сбор логов медленных запросов и тому подобное. Больше информации можно найти в статье.

https://proglib.io/p/kak-optimizirovat-proizvoditelnost-zaprosov-v-postgresql-2019-11-10
#symfony #junior

Очень важно понимать, как устроен и работает инструмент, который вы используете. Это упрощает дебаг в случае непредвиденных ошибок (особенно если на stackoverflow нет ответа), упрощает кастомизацию, так как вы хорошо понимаете, что, где и когда надо поменять, чтобы код удовлетворял вашим требованиям, и быстрее находите нестандартные решения в нестандартных ситуациях. В этой статье рассматривается устройство фреймворка Symfony.

https://proglib.io/p/ustroystvo-freymvorka-symfony-ot-zaprosa-do-otveta-2019-11-03