Как избавиться от дублирования кода в SeachModel Yii2?
Доброго времени суток коллеги.
Я новичок в Yii2, прошу направить в нужное русло.
Начала работать над проектом. Создаю различные справочники в БД. У каждого такого справочника есть одинаковые поля, [create_at, update_at].
Далее все по учебнику... Gii модель, CRUD
Так вот, в каждой модели приходиться писать один и тот же код для поиска по времени [create_at, update_at]. и еще несколько полей. Как вы понимаете все это дело попахивает дурно и больше похоже на г... код.
Есть мысля сделать какую-то базовую BaseSeachModel и от нее отнаслодоваться остальным моделькам. Или есть какие-то более красивые решения.
Алексей дорогой пользователь, настоятельно рекомендуем еще раз обратить самое пристальное внимание на п. 3.1 регламента работы сервиса (и, в особенности, на его последний абзац). В противном случае, ваши вопросы будут удаляться по причине тег-спама, а систематические нарушения приведут к блокировке учетной записи.
Ваше видение наследования и приведёт к говно коду. В Yii2 и так много наследований и разногласий с SOLID.
1 Форма-фильтр сайта = 1 SearchModel
Сначала поймите что такое SearchModel и вы поймёте её ответственность. Это форма-фильтр, которая принимает данные от пользователя и делает выборку данных по переданным параметрам из базы. Вам будет казаться, что вы дублируете код, но это так. Вы разделяете поисковые модели под определённые задачи.
Пример: На главной странице — вам нужна форма-фильтр по одному/двум полю/ям. В расширенном поиске — форма-фильтр по нескольким полям. Если у вас в разных местах одни и те же параметры фильтрации— вы используете одну форму в двух местах. Если данные разные — создаём новую SearchModel. Их может быть столько, сколько потребуется. Под каждые задачи.
Важный момент, который чаще всего используют в Yii SearchModel - это наследование от основой модели Acrive Record. Этого делать категорически нельзя. Так делают только для быстрой разработки. При такой разработке все поля базы торчат «наружу». Рекомендую все SearchModel наследовать от простой модели (класс Model). Тогда Search Model будет безопаснее и она будет всего лишь формой, а не формой с дополнительными возможностями.