Yii - зарегистрируйтесь и вставьте в другую таблицу

Используем аналогию.

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

Если вы слушатель музыкальной работы, у вас есть ссылка на сценарий, например «Fuga и Tocata» Баха и каждый музыкант, который его выполняет, делает это полиморфно по-своему.

Это всего лишь пример возможного дизайна (на Java):

public interface Musician {
  public void play(Work work);
}

public interface Work {
  public String getScript();
}

public class FugaAndToccata implements Work {
  public String getScript() {
    return Bach.getFugaAndToccataScript();
  }
}

public class AnnHalloway implements Musician {
  public void play(Work work) {
    // plays in her own style, strict, disciplined
    String script = work.getScript()
  }
}

public class VictorBorga implements Musician {
  public void play(Work work) {
    // goofing while playing with superb style
    String script = work.getScript()
  }
}

public class Listener {
  public void main(String[] args) {
    Musician musician;
    if (args!=null && args.length > 0 && args[0].equals("C")) {
      musician = new AnnHalloway();
    } else {
      musician = new TerryGilliam();
    }
    musician.play(new FugaAndToccata());
}
0
задан Gerald Sihotang 5 March 2019 в 13:35
поделиться

1 ответ

Один из способов достижения вашей цели:

- поддерживать контроллер в чистоте только с одной моделью.

$model = new SignupForm();

- добавить дополнительные поля для профиля пользователя как свойство SignupForm.php и ввести необходимые правила для их проверки.

public $fullname;
public $dateOfBirth;
public $address;
...

public function rules()
{
    ...
    [['fullname', 'dateOfBirth', 'address'], 'required'],
}

- поставить логику для сохранения профиля пользователя внутри функции signup().

public function signup()
{
    if (!$this->validate()) {
        return null;
    }

    $user = new User();

    $user->username = $this->username;
    $user->email = $this->email;
    $user->setPassword($this->password);
    $user->generateAuthKey();

    $userProfile = new UserProfile();
    $userProfile->fullname = $this->fullname;
    $userProfile->dateOfBirth = $this->dateOfBirth;
    $userProfile->address = $this->address;

    return $user->save() && ($userProfile->userId = $user->id) !== null && $userProfile->save() ? $user : null;
}

- наконец, добавьте поля профиля пользователя в поле зрения.

0
ответ дан Khotim 5 March 2019 в 13:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: