AccountController::actionRegistration() // регистрация пользователя;
в качестве модели используется RegistrationForm унаследованный от User, переопределён метод rules()
ProfileController::actionUpdate() // редактируем такие поля как имя пользователя (не логин), конт. инфа и т.д.
ProfileController::actionChangePassword // пользователь меняет пароль
и т.д.
Что бы реализовать два последних метода я нашёл два решения:
- Первый. К этому я склоняюсь. Также как и для actionRegistration() создавать отдельные модели унаследованные от User, единственное что нам требуется это переопределить метод rules()
- Второй. Этот вариант мне не очень нравится, но больше решений я не нашёл. Код см. ниже
Код: Выделить всё
class User extends CActiveRecord
{
const MODE_A = a;
const MODE_B = b;
public $mode;
public function rules()
{
switch($this->mode) {
case 'a' :
// возвращаем массив правил
case 'b' :
// возвращаем другой массив правил
}
}
Если кто-то знает более красивое, опциональное решение напишите пожалуйста.
Что касается меня, использую оба варианта. Первый, если я не уверен на сколько класс будет расширяться. Второй, если модель "узкой специализации" и я уверен, что в дальнейшем мне не придётся его использовать вне контроллёра или модуля.