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

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Ваше видение наследования и приведёт к говно коду. В Yii2 и так много наследований и разногласий с SOLID.

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

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

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

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