Смена пароля у пользователя и установка статуса "удалено"

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
za4me
Сообщения: 152
Зарегистрирован: 2016.06.26, 15:29
Контактная информация:

Смена пароля у пользователя и установка статуса "удалено"

Сообщение za4me »

Добрый день.
Подскажите, пожалуйста, в чем моя ошибка?

Имею стандартный CRUD пользователей на backend. Что-бы не делать лишних телодвижений в index, view, в модели сделал следующую функцию и вызываю ее в afterFind().

Код: Выделить всё

public function statusLabel()
{
    $this->status = $this->status === self::STATUS_ACTIVE ? 'Активен' : 'Удален';
}
В итоге в index и view все работает нормально и получаю текстом статус пользователя.

Для смены пароля сделал отдельный action:

Код: Выделить всё

public function actionChangePass($id)
{
    $model = $this->findModel($id);
    $model->scenario = User::SCENARIO_CHANGE_PASSWORD;

    if ($model->load(Yii::$app->request->post())) {
        $model->setPassword($model->password);

        if ($model->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
        }
    }

    return $this->render('change', [
        'model' => $model,
    ]);
}
Сценарий в модели так-же имеется:

Код: Выделить всё

self::SCENARIO_CHANGE_PASSWORD => ['password'],
Пароль успешно изменяется, но после смены пароля, пользователю присваивается статус "удален" (STATUS_DELETED = 0), если в afterFind убираю вызов метода statusLabel(), то все хорошо.

Возникает вопрос, почему изменяется статус, если в сценарии прописано только поле пароля?
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Смена пароля у пользователя и установка статуса "удалено"

Сообщение caHek2x »

в сценарии прописывается что грузить из формы ... но сценарий не ограничивает вас от изменения других полей .. и что это вообще за

Код: Выделить всё

$this->status = $this->status === self::STATUS_ACTIVE ? 'Активен' : 'Удален';
если статус равен значению константы то задаем значение обычный текст ...
Аватара пользователя
za4me
Сообщения: 152
Зарегистрирован: 2016.06.26, 15:29
Контактная информация:

Re: Смена пароля у пользователя и установка статуса "удалено"

Сообщение za4me »

caHek2x писал(а): 2017.02.11, 15:56 в сценарии прописывается что грузить из формы ... но сценарий не ограничивает вас от изменения других полей .. и что это вообще за

Код: Выделить всё

$this->status = $this->status === self::STATUS_ACTIVE ? 'Активен' : 'Удален';
если статус равен значению константы то задаем значение обычный текст ...
Хочу на pet проекте не удалять строки из БД, а присваивать статус "Удалено". Сделал модель, от нее отнаследовался, чтобы в каждом index, view не трогать поле status и вместо значения константы выводился текст и придумал такой костыль.
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Смена пароля у пользователя и установка статуса "удалено"

Сообщение caHek2x »

в save передавайте вторым параметром поля которые надо сохранить ....
http://www.yiiframework.com/doc-2.0/yii ... e()-detail
а вообще просто лучше бы сделали метод getStatusName() и жить было бы проще ...
Аватара пользователя
za4me
Сообщения: 152
Зарегистрирован: 2016.06.26, 15:29
Контактная информация:

Re: Смена пароля у пользователя и установка статуса "удалено"

Сообщение za4me »

caHek2x писал(а): 2017.02.11, 18:09 в save передавайте вторым параметром поля которые надо сохранить ....
http://www.yiiframework.com/doc-2.0/yii ... e()-detail
а вообще просто лучше бы сделали метод getStatusName() и жить было бы проще ...
Спасибо.
Метод getStatusName что-то типо такого?

Код: Выделить всё

public function getStatusName()
{
    $this->statusName = $this->status === self::STATUS_ACTIVE ? 'Активен' : 'Удален';
}
т.е. Добавить новое поле в которое после выборки из БД будет записываться словесное название статуса пользователя?
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Смена пароля у пользователя и установка статуса "удалено"

Сообщение caHek2x »

никаких новых полей не надо ...
у вас гдето в view есть echo $model->status ?!
делаете в модели метод:

Код: Выделить всё

public function getStatusName()
{
    return $this->status === self::STATUS_ACTIVE ? 'Активен' : 'Удален';
}
и в view будет echo $model->getStatusName()
Аватара пользователя
za4me
Сообщения: 152
Зарегистрирован: 2016.06.26, 15:29
Контактная информация:

Re: Смена пароля у пользователя и установка статуса "удалено"

Сообщение za4me »

caHek2x писал(а): 2017.02.11, 19:54 и в view будет echo $model->getStatusName()
В итоге в каждом view мне нужно будет из view обращаться к модели. Этого и хочу избежать.
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Смена пароля у пользователя и установка статуса "удалено"

Сообщение Onotole »

za4me писал(а): 2017.02.13, 15:22
caHek2x писал(а): 2017.02.11, 19:54 и в view будет echo $model->getStatusName()
В итоге в каждом view мне нужно будет из view обращаться к модели. Этого и хочу избежать.
А сейчас в каждом view вы не обращаетесь к модели?
Аватара пользователя
za4me
Сообщения: 152
Зарегистрирован: 2016.06.26, 15:29
Контактная информация:

Re: Смена пароля у пользователя и установка статуса "удалено"

Сообщение za4me »

Onotole писал(а): 2017.02.13, 15:49 А сейчас в каждом view вы не обращаетесь к модели?
Обращаюсь, но используя способ предложенный выше, на каждый view необходимо будет писать вызов метода getStatusName. В данный момент так и реализовано, хочу упростить себе задачу что-бы в каждом новом view не вызывать данный метод.
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Смена пароля у пользователя и установка статуса "удалено"

Сообщение Onotole »

za4me писал(а): 2017.02.13, 15:58
Onotole писал(а): 2017.02.13, 15:49 А сейчас в каждом view вы не обращаетесь к модели?
Обращаюсь, но используя способ предложенный выше, на каждый view необходимо будет писать вызов метода getStatusName. В данный момент так и реализовано, хочу упростить себе задачу что-бы в каждом новом view не вызывать данный метод.
По-моему это самый простой способ
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Смена пароля у пользователя и установка статуса "удалено"

Сообщение caHek2x »

za4me писал(а): 2017.02.13, 15:58
Onotole писал(а): 2017.02.13, 15:49 А сейчас в каждом view вы не обращаетесь к модели?
Обращаюсь, но используя способ предложенный выше, на каждый view необходимо будет писать вызов метода getStatusName. В данный момент так и реализовано, хочу упростить себе задачу что-бы в каждом новом view не вызывать данный метод.
тем что вы городите вы усложняете себе задачу ... реализация такого метода не затратна по ресурсам (если вы вдруг решили что это очель сложно для выполнения) ... зато все аккуратно и без костылей ...
Ответить