Конечная проблема (и) заключалась в простой опечатке: EXPANDED_TEXT_AD против EXPENDED_TEXT_AD вместе с необходимостью использования полного имени класса:
// No need for any use statements
// use App\Service\AdTypes\ExpendedTextAdTypes as ExpendedTextAdTypes;
public function getAdsModel($ad) //<-- for example "EXPENDED_TEXT_AD"
{
$type = explode('_',strtolower($ad));
$modelName = array_map('ucfirst', $type);
$modelName = implode('',$modelName).'Types';
$modelName = 'App\\Service\\AdTypes\\' . $modelName; // Add this
return new $modelName($ad);
}
Как правило, опечатки рассматриваются какбыть не по теме .Но этот вопрос на самом деле имеет две проблемы, а также указывает на то, что оператор использования не нужен.Поэтому я думаю, что это можно квалифицировать как ответ.
Название вопроса также вводит в заблуждение.Я нажал на вопрос, потому что я никогда не видел CLASS в сообщении об ошибке.Лучше было бы опубликовать фактическое сообщение об ошибке, что позволило бы легче обнаружить опечатку.
И, наконец, небольшой совет.Такое преобразование из EXPENDED_TEXT_AD в ExpendedTextAdTypes может быть сложным в обслуживании и определенно привязывает вас к схеме именования классов.Почему бы просто не использовать ExpendedTextAd вместо EXPENDED_TEXT_AD?Symfony делает такие вещи постоянно.