В настоящее время я пишу несколько сидеров Laravel для заполнения базы данных в моей тестовой среде. Я использую отличный Faker для генерации значений столбцов и плагин Faker под названием CronExpressionGenerator для генерации случайных значений cron.
$faker->addProvider(new \CronExpressionGenerator\FakerProvider($faker));
$cronTxt = $faker->cron();
Затем я использую пакет под названием Парсер выражений Cron для генерации метки времени следующего вхождения каждого выражения cron.
$cron = new \Cron\CronExpression($cronTxt, new DateTimeZone(DateTimeZone::UTC));
Оба этих пакета устанавливаются с помощью Composer.
К сожалению, оба пакета, похоже, используют пространство имен \Cron\CronExpression
:
Поэтому, когда я запускаю свою миграцию db, PHP прерывает подпись функции.
Symfony\Component\Debug\Exception\FatalThrowableError : Argument 2 passed to Cron\CronExpression::__construct() must be an instance of Cron\FieldFactory, instance of DateTimeZone given
Редактировать - похоже, сервис изображений сейчас не работает. На приведенном выше снимке экрана показано, что PHPStorm показывает два совпадения CronExpression
, по одному для каждого:
vendor/dragonmantank/cron-expression/src/Cron
vendor/polander/cron/src/Cron
Есть ли какая-то практическая причина, по которой вы используете poliander/cron
вместо многих других пакетов, которые предоставляют аналогичные функции и не конфликтуют с гораздо более популярными пакетами?
Я не думаю, что есть способ обойти это, кроме разветвления второй библиотеки и изменения пространства имен и использования вашего репозитория VCS, или просто копирования его в свой проект и изменения его там. В конце концов, это действительно похоже на один класс. Такое простое пространство имен
Cron
- довольно плохой дизайн.