@kuliev_a

Как избавиться от дублирования кода в SeachModel Yii2?

Доброго времени суток коллеги.

Я новичок в Yii2, прошу направить в нужное русло.
Начала работать над проектом. Создаю различные справочники в БД. У каждого такого справочника есть одинаковые поля, [create_at, update_at].

Далее все по учебнику... Gii модель, CRUD
Так вот, в каждой модели приходиться писать один и тот же код для поиска по времени [create_at, update_at]. и еще несколько полей. Как вы понимаете все это дело попахивает дурно и больше похоже на г... код.

Есть мысля сделать какую-то базовую BaseSeachModel и от нее отнаслодоваться остальным моделькам. Или есть какие-то более красивые решения.
  • Вопрос задан
  • 68 просмотров
Решения вопроса 1
myks92
@myks92 Куратор тега Yii
Нашёл решение — пометь вопрос ответом!
Ваше видение наследования и приведёт к говно коду. В Yii2 и так много наследований и разногласий с SOLID.

1 Форма-фильтр сайта = 1 SearchModel

Сначала поймите что такое SearchModel и вы поймёте её ответственность. Это форма-фильтр, которая принимает данные от пользователя и делает выборку данных по переданным параметрам из базы. Вам будет казаться, что вы дублируете код, но это так. Вы разделяете поисковые модели под определённые задачи.

Пример: На главной странице — вам нужна форма-фильтр по одному/двум полю/ям. В расширенном поиске — форма-фильтр по нескольким полям. Если у вас в разных местах одни и те же параметры фильтрации— вы используете одну форму в двух местах. Если данные разные — создаём новую SearchModel. Их может быть столько, сколько потребуется. Под каждые задачи.

Важный момент, который чаще всего используют в Yii SearchModel - это наследование от основой модели Acrive Record. Этого делать категорически нельзя. Так делают только для быстрой разработки. При такой разработке все поля базы торчат «наружу». Рекомендую все SearchModel наследовать от простой модели (класс Model). Тогда Search Model будет безопаснее и она будет всего лишь формой, а не формой с дополнительными возможностями.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы