Стартовал ежегодный опрос!
С 2020 года лидеры русскоязычного PHP-сообщества проводят опрос. Так мы получаем портрет нашей аудитории и понимаем, на чём фокусироваться в новом году.
В этот раз эстафету от CutCode приняла питерская команда Live PHP, пожелаем ребятам удачи с вёрсткой итогов!
➡️ Пройти опрос
Опрос анонимный, но если оставить свою почту, можно поучаствовать в розыгрыше слоника💙 Пых.
Итоги, как обычно, будут опубликованы на phpcommunity.ru.
С 2020 года лидеры русскоязычного PHP-сообщества проводят опрос. Так мы получаем портрет нашей аудитории и понимаем, на чём фокусироваться в новом году.
В этот раз эстафету от CutCode приняла питерская команда Live PHP, пожелаем ребятам удачи с вёрсткой итогов!
Опрос анонимный, но если оставить свою почту, можно поучаствовать в розыгрыше слоника
Итоги, как обычно, будут опубликованы на phpcommunity.ru.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25🔥15🥱3✍1❤1
Прямо сейчас на CutCode стрим про Yii3 с создателями!
Залетайте, чтобы обсудить долгожданный релиз и задать вопросы Александру Макарову и Сергею Предводителеву.
https://youtu.be/Ww_f5AhamIU
https://vkvideo.ru/video-205214227_456239455
Залетайте, чтобы обсудить долгожданный релиз и задать вопросы Александру Макарову и Сергею Предводителеву.
https://youtu.be/Ww_f5AhamIU
https://vkvideo.ru/video-205214227_456239455
YouTube
Yii3. Обзор релиза с Макаровым и Предводителевым
🎉 Yii3 — релиз состоялся!
Официальный релиз после долгой разработки. Полная переработка фреймворка для современного PHP.
Гости стрима - Александр Макаров и Сергей Предводителев — ответят, что это значит для разработчиков. Вместе разберем ключевые новшества:…
Официальный релиз после долгой разработки. Полная переработка фреймворка для современного PHP.
Гости стрима - Александр Макаров и Сергей Предводителев — ответят, что это значит для разработчиков. Вместе разберем ключевые новшества:…
🔥24👍10👎8❤6🥱2👻2
Media is too big
VIEW IN TELEGRAM
Плюшевые слоники уже есть — что делаем в этом году? Как вариант — 3D-конструтор 5cult.ru. Пишите другие идеи в комментариях.
🔥21👎10❤3👍3🤮2💩1💅1
Переменные среды в Docker Compose
Основной момент, который важно понять, — в
1. Переменные хоста
Первый уровень — это переменные хоста. Их можно интерполировать в
Если запустить
На уровне синтаксиса тут есть два основных варианта:
Также на этом уровне можно использовать
Можно явно указать несколько своих
Самый высокий приоритет всегда будет у реальных переменных среды:
Про второй уровень, уровень контейнера, расскажу в следующем посте.
📁 Set, use, and manage variables in a Compose file with interpolation
📁 Environment variables precedence in Docker Compose
⸻
🐘 Кстати, этот пост я опубликовал в PHPeople ещё в прошлом году, присоединяйся!
Основной момент, который важно понять, — в
docker compose есть два уровня работы с переменными среды.1. Переменные хоста
Первый уровень — это переменные хоста. Их можно интерполировать в
compose.yaml (бывший docker-compose.yml), например:
services:
php:
image: php:${PHP_VERSION}-cli-bookworm
Если запустить
docker compose up без PHP_VERSION в среде, получим предупреждение, что такой переменной нет и была использована пустая строка. Дальше, конечно, ошибка: php:-cli-bookworm не является корректной ссылкой на образ.На уровне синтаксиса тут есть два основных варианта:
# задать значение по умолчанию
image: php:${PHP_VERSION:-8.5}-cli-bookworm
# или превратить предупреждение в ошибку с кастомным текстом
image: php:${PHP_VERSION:?Env variable `PHP_VERSION` is required}-cli-bookworm
Также на этом уровне можно использовать
.env файлы. По умолчанию docker compose ищет .env в текущей директории (pwd), затем в директории проекта (где compose.yaml).Можно явно указать несколько своих
.env файлов. Пример с классической схемой .env.local > .env, для отладки используем docker compose config --environment:
echo 'PHP_VERSION=8.4' > .env
echo 'PHP_VERSION=8.5' > .env.local
docker compose --env-file .env \
--env-file .env.local \
config --environment | grep PHP_VERSION
# выведет PHP_VERSION=8.5
Самый высокий приоритет всегда будет у реальных переменных среды:
export PHP_VERSION=8.6
docker compose --env-file .env \
--env-file .env.local \
config --environment | grep PHP_VERSION
# выведет PHP_VERSION=8.6
Про второй уровень, уровень контейнера, расскажу в следующем посте.
⸻
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍62🔥15❤9🤡5
Переменные среды в Docker Compose
Разобравшись с переменными уровня хоста, мы готовы обсудить второй уровень.
2. Переменные Docker-сервиса
По умолчанию сервис не получает никакие переменные среды с хоста. Мы можем их прокинуть, используя ключи
или как массив:
Тут возникает интересный момент со значениями по умолчанию. Допустим, в контейнере крутится приложение на Symfony, которое обрабатывает отсуствие переменной среды
Если в
Решение, конечно же, есть в документации, но его легко не заметить:
или
По сути, это самый верный и простой способ прокинуть переменные среды с хоста в контейнер "как есть".
У
Сами env файлы по умолчанию парсятся в формате Docker: с интерполяцией
В будущем обсудим, как укротить всю эту нереальную гибкость и выработать best practice.
📁 Документация по environment
📁 Документация по env_file
⸻
🐘 Кстати, этот пост я опубликовал в PHPeople ещё в прошлом году, присоединяйся!
Разобравшись с переменными уровня хоста, мы готовы обсудить второй уровень.
2. Переменные Docker-сервиса
По умолчанию сервис не получает никакие переменные среды с хоста. Мы можем их прокинуть, используя ключи
environment и env_file.environment можно оформить как объект:
php:
environment:
DB_HOST: postgres
STORAGE_PATH: ${STORAGE_PATH}
или как массив:
php:
environment:
- DB_HOST=postgres
- STORAGE_PATH=${STORAGE_PATH}
Тут возникает интересный момент со значениями по умолчанию. Допустим, в контейнере крутится приложение на Symfony, которое обрабатывает отсуствие переменной среды
STORAGE_PATH с использованием процессоров:
$di->parameters()
->set(
'storage.default_path',
'%kernel.project_dir%/var/storage/%kernel.environment%',
);
$di->services()
->set(Storage::class)
->args([
'path' => env('STORAGE_PATH')
->default('storage.default_path')
]);
Если в
compose.yaml прописать STORAGE_PATH=${STORAGE_PATH:?/app/var/storage/dev}, это будет не то же самое. Без значения по умолчанию тоже нельзя оставить переменную, иначе Docker выдаст предупреждение и присвоит переменной пустую строку.Решение, конечно же, есть в документации, но его легко не заметить:
Environment variables can be declared by a single key (no value to equals sign). In this case Compose relies on you to resolve the value. If the value is not resolved, the variable is unset and is removed from the service container environment.
php:
environment:
- STORAGE_PATH: ${STORAGE_PATH}
+ STORAGE_PATH:
или
php:
environment:
- - STORAGE_PATH=${STORAGE_PATH}
+ - STORAGE_PATH
По сути, это самый верный и простой способ прокинуть переменные среды с хоста в контейнер "как есть".
У
env_file тоже есть несколько интересных нюансов. Например, начиная с Docker 2.24.0, можно объявлять необязательные файлы:
php:
env_file:
- path: .env # required by default
- path: .env.local
required: false
Сами env файлы по умолчанию парсятся в формате Docker: с интерполяцией
${}, двумя вариантами синтаксиса (: и =) и экранированием. Это можно выключить, задав файлу format: raw.В будущем обсудим, как укротить всю эту нереальную гибкость и выработать best practice.
⸻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍35❤13🤡7🔥6
🗺️ ClassMap: типизируем опции, конфиги, атрибуты
Новая лекция в Пых Лектории про паттерн ClassMap — расширяемый и типобезопасный способ передачи конфигурации между компонентами.
План лекции:
• берём популярную библиотеку Symfony и находим три проблемы, связанные с передачей нетипизированных опций,
• обсуждаем неоптимальные подходы,
• изучаем паттерн ClassMap,
• применяем его и получаем исчерпывающее решение,
• анализируем плюсы и минусы паттерна ClassMap.
Также лекция затрагивает следующие темы:
• проектирование расширяемых ООП-компонентов,
• иммутабельность,
• дженерики,
• клонирование в PHP 8.5.
Залетай в Хобота, чтобы посмотреть!
50 минут / 1000 рублей
Новая лекция в Пых Лектории про паттерн ClassMap — расширяемый и типобезопасный способ передачи конфигурации между компонентами.
План лекции:
• берём популярную библиотеку Symfony и находим три проблемы, связанные с передачей нетипизированных опций,
• обсуждаем неоптимальные подходы,
• изучаем паттерн ClassMap,
• применяем его и получаем исчерпывающее решение,
• анализируем плюсы и минусы паттерна ClassMap.
Также лекция затрагивает следующие темы:
• проектирование расширяемых ООП-компонентов,
• иммутабельность,
• дженерики,
• клонирование в PHP 8.5.
Залетай в Хобота, чтобы посмотреть!
50 минут / 1000 рублей
3💊33👍24🔥13❤5✍4🤮3🤡3👏2🤯2💩2👎1
Пых
🗺️ ClassMap: типизируем опции, конфиги, атрибуты Новая лекция в Пых Лектории про паттерн ClassMap — расширяемый и типобезопасный способ передачи конфигурации между компонентами. План лекции: • берём популярную библиотеку Symfony и находим три проблемы, связанные…
🗺️ ClassMap: типизируем опции, конфиги, атрибуты
Друзья, я осознал, что из тизера и описания многие не поняли, о чём моя новая лекция.
Вместо лишних слов выкладываю первые 11 минут материала, где я подробно демонстрирую проблематику и формулирую задачу.
📹 YouTube | 📹 VK Видео | 💙 Лекция целиком
Друзья, я осознал, что из тизера и описания многие не поняли, о чём моя новая лекция.
Вместо лишних слов выкладываю первые 11 минут материала, где я подробно демонстрирую проблематику и формулирую задачу.
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
ClassMap: типизируем опции, конфиги, атрибуты — Анонс лекции Пых Лектория
Полная версия лекции в Хоботе: https://news.1rj.ru/str/phpyhobot
0:00 План лекции
0:26 Устройство Symfony Serializer
3:24 Проблема 1: непонятно, что передавать в контекст
5:14 Проблема 2: контекст нельзя проверить статически
7:00 Проблема 3: неудобно имплементировать…
0:00 План лекции
0:26 Устройство Symfony Serializer
3:24 Проблема 1: непонятно, что передавать в контекст
5:14 Проблема 2: контекст нельзя проверить статически
7:00 Проблема 3: неудобно имплементировать…
4👍26❤7🔥7💊4🤮3🤡3💩2
Знакомство с новыми авторами PHPeople
У меня в офисе наконец-то появился проводной интернет, и я запускаю сезон стримов на Пыхе!
Для начала сегодня в 19:00 встретимся с новыми авторами PHPeople:
• Александр Макаров — всемирно известный лидер команды Yii,
• Пётр Мязин — автор Пятиминутки, перешёл с PHP на ИИ,
• Павла Бучнев — фартанист и вайб-кодер,
• Вадим Дворовенко — знает Laravel как Тейлор, но ещё не лысый,
• Edmond Dantes — разрабатывает асинхронный PHP будущего.
Чуть позже объявлю, когда будет первый PHP-линч и Open Source Цех.
📹 YouTube | 📹 VK Видео | 🐘 PHPeople
У меня в офисе наконец-то появился проводной интернет, и я запускаю сезон стримов на Пыхе!
Для начала сегодня в 19:00 встретимся с новыми авторами PHPeople:
• Александр Макаров — всемирно известный лидер команды Yii,
• Пётр Мязин — автор Пятиминутки, перешёл с PHP на ИИ,
• Павла Бучнев — фартанист и вайб-кодер,
• Вадим Дворовенко — знает Laravel как Тейлор, но ещё не лысый,
• Edmond Dantes — разрабатывает асинхронный PHP будущего.
Чуть позже объявлю, когда будет первый PHP-линч и Open Source Цех.
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Знакомство с новыми авторами PHPeople
Новые авторы и тариф в PHPeople
1. У нас пополнение!
К нам присоединились пять новых экспертов:
• Александр Макаров — всемирно известный лидер команды Yii.
• Петр Мязин — автор Пятиминутки, перешёл с PHP на ИИ.
• Павел Бучнев — фартанист и вайб-кодер.
•…
1. У нас пополнение!
К нам присоединились пять новых экспертов:
• Александр Макаров — всемирно известный лидер команды Yii.
• Петр Мязин — автор Пятиминутки, перешёл с PHP на ИИ.
• Павел Бучнев — фартанист и вайб-кодер.
•…
🔥27👍13❤12😁3🤮1
Пых
Знакомство с новыми авторами PHPeople У меня в офисе наконец-то появился проводной интернет, и я запускаю сезон стримов на Пыхе! Для начала сегодня в 19:00 встретимся с новыми авторами PHPeople: • Александр Макаров — всемирно известный лидер команды Yii…
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Знакомство с новыми авторами PHPeople
Новые авторы и тариф в PHPeople
1. У нас пополнение!
К нам присоединились пять новых экспертов:
• Александр Макаров — всемирно известный лидер команды Yii.
• Петр Мязин — автор Пятиминутки, перешёл с PHP на ИИ.
• Павел Бучнев — фартанист и вайб-кодер.
•…
1. У нас пополнение!
К нам присоединились пять новых экспертов:
• Александр Макаров — всемирно известный лидер команды Yii.
• Петр Мязин — автор Пятиминутки, перешёл с PHP на ИИ.
• Павел Бучнев — фартанист и вайб-кодер.
•…
🔥13🤡4👍3❤2🤮2😁1
Сегодня наконец-то PHP-линч #29!
Я открываю новый сезон знаменитой рубрики PHP-линч! Сам по ней невероятно соскучился.
Хотелось бы сразу посмотреть на Yii3, но лучше мы в этот раз разогреемся чем-то поменьше, а, например, в следующую среду весь стрим посвятим Yii.
Залетайте в 19:00 на📹 YouTube и 📹 VK Видео.
#php_линч
Я открываю новый сезон знаменитой рубрики PHP-линч! Сам по ней невероятно соскучился.
Хотелось бы сразу посмотреть на Yii3, но лучше мы в этот раз разогреемся чем-то поменьше, а, например, в следующую среду весь стрим посвятим Yii.
Залетайте в 19:00 на
#php_линч
Please open Telegram to view this post
VIEW IN TELEGRAM
VK Видео
PHP-линч #29
Как устроен PHP-линч: 1. Во время стрима вы скидываете в чат трансляции ссылки на репозитории и в трёх словах описываете, что там. Это может быть ваш пет-проект или библиотека, а может быть компонент (не)известного фреймворка. 2. Я выбираю проект. 3. Клонирую…
🔥27👍8❤6
Пых
Сегодня наконец-то PHP-линч #29! Я открываю новый сезон знаменитой рубрики PHP-линч! Сам по ней невероятно соскучился. Хотелось бы сразу посмотреть на Yii3, но лучше мы в этот раз разогреемся чем-то поменьше, а, например, в следующую среду весь стрим посвятим…
Please open Telegram to view this post
VIEW IN TELEGRAM
VK Видео
PHP-линч #29
Как устроен PHP-линч: 1. Во время стрима вы скидываете в чат трансляции ссылки на репозитории и в трёх словах описываете, что там. Это может быть ваш пет-проект или библиотека, а может быть компонент (не)известного фреймворка. 2. Я выбираю проект. 3. Клонирую…
🔥5❤4👍3