Как создавать объекты разных классов в зависимости от атрибута в Yii2? Есть базовая модель, есть ее наследники. Нужно чтобы в зависимости от атрибута, например type создавалась новая модель класса {Type}{BaseModel}, если type указан или класса {BaseModel}, если type не указан . Как такое можно реализовать?

21 Авг 2019 в 07:04
220 +1
1
Ответы
1

В Yii2 можно реализовать данную функциональность, используя фабричный метод. Для этого нужно создать фабрику, которая будет создавать объекты разных классов в зависимости от переданного типа.

Пример реализации:

Создаем базовую модель BaseModel:class BaseModel extends \yii\base\Model
{
// ваша базовая модель
}Создаем наследника BaseFactory, который будет создавать объекты разных классов в зависимости от переданного типа:class BaseFactory
{
public static function createModel($type = null)
{
$className = ucfirst($type) . 'BaseModel';
if (!class_exists($className)) {
$className = 'BaseModel';
}
return new $className();
}
}Теперь можно создавать объекты разных классов в зависимости от переданного типа:$type = 'custom';
$model = BaseFactory::createModel($type);

В данном примере, если передан тип 'custom', будет создан объект CustomBaseModel (если такой класс существует), иначе будет создан объект BaseModel.

Таким образом, вы сможете динамически создавать объекты различных классов в зависимости от переданного типа.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир