Дмитрий, не задумывались ли вы над созданием мастер класса по Java/Spring?

Написание и генерирование миграций для автоматизации создания и изменения структуры БД. Использование фикстур для автозаполнения таблиц демонстрационными данными.
Чтобы не пропускать новые эпизоды подпишитесь на наш канал @deworkerpro в Telegram

Дмитрий, не задумывались ли вы над созданием мастер класса по Java/Spring?
Пока не задумывались.
У меня коллега по работе прокомметировал ваш конфиг доктрины, говорит: я первый раз вижу, чтобы на симфони кто то конфиг доктрины описывал в php, а не в yml :)
В Symfony 2 и 3 это было популярно, но сейчас в документации больше склоняются к аннотациям.
https://symfony.com/doc/current/reference/configuration/doctrine.html
Открыл 5-ю документацию, там в первой половине страницы php варианта вообще нет :) Начинается только с раздела custom
А, вы про сам конфиг подключения в Yaml, а не про конфиги мэппинга в аннотациях или Yaml.
Тогда да, в Symfony все конфиги по умолчанию в Yaml, включая доктриновские. И их там разбирает сам DoctrineBundle. Но мы используем Doctrine напрямую без Symfony-бандла, поэтому всё объекты в контейнере собираем сами.
Дмитрий, здравствуйте, вопрос немного не по теме - если на симфони какие-либо готовые системы Single Sign On Authentication? Если нет, подскажите в какую сторону смотреть, спасибо
А почему вы используете run - - rm, а не exec, как раньше? Есть какое-то преимущество?
Работу run --rm удобнее отслеживать и он более соответствует философии запуска процесса.
Привет. У себя делаю команду migrations:migrate выдает ошибку:
WARNING! You are about to execute a database migration that could result in schema changes and data loss. Are you sure you wish to continue? (y/n)
Aborted.
Пробую migrations:migrate --no-interaction тоже ошибка, команда не воспринимает аргументы
здравствуйте, сегодня при make init, (при docker-compose run --rm api-php-cli composer update, а не install) все библиотеки обновились успешно, тесты также прошли, но миграции застряли: ошибка: WARNING! You are about to execute a database migration that could result in schema changes and data loss. Are you sure you wish to continue? (y/n) Aborted. http://www.arvidija.lt/Galerija/290.jpg
У меня тоже самое. (:
Смог запустить через bin/app.php. Вот команда:
docker-compose run --rm api-php-cli php bin/app.php --ansi migrations:migrate --no-interaction
Я погуглил немного и нашол что это может быть баг в php7.4. Но это неточно :)
В Symfony 5.0.5 они убрали неявную неинтерактивность. Добавьте пока флаг явно:
... composer app migrations:migrate -- --no-interaction
в Makefile с composer app migrations:migrate -- --no-interaction все равно не работает, а docker-compose run --rm api-php-cli php bin/app.php --ansi migrations:migrate --no-interaction - миграций действует и фикстуры проходит (здесь насчет composer update)
Обсуждаем в issues. Уже есть Pull Request с фиксом.
Откатитесь пока назад на 5.0.4.
спасибо, понял
Дмитрий, добрый день! Вопрос не по уроку Подскажите пжл, как в psalm описать stdClass, как мы описывали массив с динамическими значениями? Всю документацию и issue на github перерыл, так и не понял как это сделать. Если вы в курсе, подскажите пжл
@psalm-var object{foo:string}
Здравствуйте Дмитрий! Помогите пожалуйста разобраться со след проблемой: С целью немного разобраться с Doctrine и миграциями пробовал дописывать нотации и генерировать новые миграции по разнице в коде. И когда я запускаю просто docker-compose run --rm api-php-cli composer app migrations:migrate не примененные миграции находятся и все применяется без проблем. Но если попробовать запустить например docker-compose run --rm api-php-cli composer app migrations:execute -- --dry-run Version20201106201722 или -- --down Version20201106201722 - вылетает ошибка что файл миграции не найден. Я перепробовал массу вариантов - указывал полный путь /app/src/Data/Migration/Version20201106201722 и пути из migrations:status из пространства имен, в том числе и из контейнера запустив docker-compose run --rm api-php-cli bash - результат один и тот же - файл миграции не найден! Собственно вопрос - как в случае применения миграций в ручную через migrations:execute правильно указать путь в файлу миграции? Спасибо!
Возможно кому пригодиться - указывать путь необходимо как строку с пространством имен: например для --down это: docker-compose run --rm api-php-cli composer app migrations:execute -- --down 'App\Data\Migration\Version20201106201722'
Указывайте просто номер:
app migrations:execute 20201106201722
Добрый день!
Застрял с фикстурами.
не принимает тип mixed
PHP Fatal error: Uncaught TypeError: Return value of App\Auth\Entity\User\IdType::convertToDatabaseValue() must be an instance of App\Auth\Entity\User\mixed, string returned in /app/src/Auth/Entity/User/IdType.php:16
Не пойму, где напортачил.
Сверял код с исходным кодом все ок.
Подскажите плиз, где косяк?
Псевдотип mixed появился только в PHP 8.0
Спасибо
Подскажите плиз!
Mapping проходит успешно. но при запуске любой команды типа
$ docker-compose run --rm api-php-cli composer app orm:validate-schema
In AbstractPostgreSQLDriver.php line 88:
An exception occurred in driver: SQLSTATE[08006] [7] FATAL: password authentication failed for user "root"
не могу найти, где изменить юзера, в yml объявлен POSTGRES_USER: app, в PHPStorm всё работает.
Укажите DB_USER в environments самого api-php-cli
Дмитрий, это как раз указано в docker-compose.yml
api-php-cli:
build:
context: api/docker
dockerfile: development/php-cli/Dockerfile
environment:
APP_ENV: dev
APP_DEBUG: 1
DB_HOST: api-postgres
DB_USER: app
DB_PASSWORD: secret
DB_NAME: app
Через PHPStorm доступ к базе данных нормальный, могу работать с ней и запускать SQL, а через командную строку нет.
UPDATE: проблема решилась добавлением DB_URL в api-php-cli environment
Мы от общего DB_URL в итоге перешли к указанию отдельных параметров DB_HOST, DB_USER и т.п.
Не используйте оба подхода одновременно.
Добрый вечер, Дмитрий.
Можно ли как-то исключить из команды migration:diff некоторые таблицы, которые создавались до подключения doctrine и наследуются от ActiveRecord?
Нужные таблицы, в которых надо отследить изменения начинаются с amqp_
Пробовал использовать фильтр, но результата не дало.
mi:diff --filter-expression='~^(?!amqp_)~' -n
Проблема решилась.
Первая причина была в том, что при вызове консольной команды надо указывать два дефиса, тогда команда будет правильно воспринимать --filter-expression
composer app -- mi:diff --filter-expression='~^(?!amqp_)~' -n
Вторая была в pattern-е, необходимо изменить на такой
'~^(?=amqp_)~'
Чтобы не прописывать это каждый раз флагами можно настроить игнорирование глобально:
$config->setSchemaAssetsFilter(static function (string|AbstractAsset $assetName): bool {
if ($assetName instanceof AbstractAsset) {
$assetName = $assetName->getName();
}
return (bool) preg_match('~^(?=amqp_)~', $assetName);
});
Именно так и сделал, спасибо.
Спасибо, отличный урок.