Унификация FeedBackForm

Иногда возникает необходимость подредактировать FeedBackForm.

Например:

  • сделать поле "text" не обязательным;
  • добавить дополнительные поля в форму;
  • и т.д.

Но как быть в такое случае если поле "text" является обязательным в модели FeedBack. А чтобы добавить дополнительные поля нужно помучаться: добавить поля в базу, подредактировать модель и т.д.

Или можно пойти другим путем и сделать унификацию FeedBackForm, то есть в форму прописать обязательные функции, которые будут возвращать все параметры модели FeedBack.

И так что для этого нужно будет сделать:

  1. Создаем интерфейс IFeedbackForm в котором прописываемся следующие функции: getName(), getEmail(), getTheme(), getText() - это обязательные параметры модели FeedBack. Можно будет так же прописать функции и для других параметров.
  2. К классу FeedBackForm подключаем интерфейс IFeedbackForm. И тогда в этом классе нам нужно будет реализовать функции интерфейса.
  3. Далее так где нужно для для модели FeedBack получить параметр name получаем его из формы так: $form->getName()

 

Что в итоге получим:

  1. В FeedBackForm мы сможем объявить любые необходимые переменные и чтобы оно попали в базу нужно будет сделать примерно так:

    public function getText()
    {
        $text = "Комментарий: ".$this->comment;
        $text.= "Удобное время: ".$this->time;

        return $text;
    }

  2. Если какой то параметр нам не нужен то:
    public function getTheme()
    {
        return 'не указана';
    }

По такой схеме можно будет создавать формы любой сложности без кардинальных изменений базы и моделей.

 

Что думаете?