[Yii] Как работать с несколькими похожими сущностями, хранящимися в одной таблице?
Добрый день.
Исходные данные таковы: на сайте имеется несколько одинаковых сущностей — Страница, Акция, Вопрос. Разница лишь в том, как они должны выводиться + у акций и вопросов есть небольшая картинка и краткое текстовое описание (обязательные поля; для страниц их заполнять не нужно). Т.к. в остальном они похожи, то в БД для них можно создать одну таблицу page.
Но возникает вопрос как поступать в моделями, контроллёрами и как правильно настроить роутинг.
Структура адресов нужна такая:
example.com/specials/ — список акций
example.com/questions/ — список вопросов
example.com/question/{title} — страница вопроса
example.com/{title} — любая другая страница
Правильно ли будет использовать для всех трёх сущностей одну модель и один контроллёр (и уже в коде в зависимости от типа делать проверки на заполнение необходимых полей)? Или правильней создать отдельную модель и контроллёр для каждого вида сущностей (в этом случае код будет немного дублироваться, но правила роутинга упростятся)?
Если данные хранятся в одной таблице, модель лучше использовать одну. Разделить валидацию можно при помощи сценариев Валидация форм. По поводу действий, если у тебя 3 контроллера для каждого типа, то обработку формы с разными сценариями лучше поместить в каждый тип контроллера.