Проблема заключается в том, что метод Str::title() возвращает строку, начинающуюся с заглавной буквы, но не преобразует её в нижний регистр. Поэтому, когда вы пытаетесь создать класс с помощью new $class, PHP ищет класс с таким же именем, как результат метода Str::title(), который начинается со заглавной буквы.
Для исправления этой проблемы нужно преобразовать результат метода Str::title() в нижний регистр, а затем создать класс. Вот как это можно сделать:
class ParserFactory { public static function create($engine) { $class = Str::title($engine) . 'Parser'; $class = 'App\Models\\' . $class; // добавляем пространство имен к имени класса $class = app()->make($class); // создаем класс с помощью сервис-контейнера Laravel return $class; } }
Теперь ваш фабричный метод должен правильно создавать классы на основе переданного движка.
Проблема заключается в том, что метод Str::title() возвращает строку, начинающуюся с заглавной буквы, но не преобразует её в нижний регистр. Поэтому, когда вы пытаетесь создать класс с помощью new $class, PHP ищет класс с таким же именем, как результат метода Str::title(), который начинается со заглавной буквы.
Для исправления этой проблемы нужно преобразовать результат метода Str::title() в нижний регистр, а затем создать класс. Вот как это можно сделать:
class ParserFactory {public static function create($engine)
{
$class = Str::title($engine) . 'Parser';
$class = 'App\Models\\' . $class; // добавляем пространство имен к имени класса
$class = app()->make($class); // создаем класс с помощью сервис-контейнера Laravel
return $class;
}
}
Теперь ваш фабричный метод должен правильно создавать классы на основе переданного движка.