Миграция: добавления пользователя

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
GHopper
Сообщения: 83
Зарегистрирован: 2017.06.05, 10:53

Миграция: добавления пользователя

Сообщение GHopper » 2018.09.07, 13:31

Приветствую.

Есть локальный тестовый сервер, на нем создан Yii2-проект с множеством таблиц, настроенными моделями и всем таким прочим.

Теперь переношу все это добро на продакшен. Купил shared hosting, залил исходники на git-сервер. На хостинге сделал git clone && composer install && ./init и все чудным образом встало на исходную позицию.

Но пользователя-то нет в БД. И как я его добавлял на локальном сервере - я уже не помню. По-итогу заколхозил миграцию на продакшене

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

        $transaction = $this->getDb()->beginTransaction();
        $user = \Yii::createObject([
            'class'    => User::className(),
            'scenario' => 'create',
            'email'    => 'MY_MAIL@HOST.COM',
            'username' => 'USER_NAME',
            'auth_key' => 'AUTH_SECRET', //хз что это вобще 
            'password' => 'PASS_SECRET',
        ]);
        if (!$user->insert(false)) {
            $transaction->rollBack();
            return false;
        }
        $transaction->commit();

Это сработало, но так делать нельзя!

Вопрос - а как нужно было создавать пользователя на продакшене?

urichalex
Сообщения: 970
Зарегистрирован: 2015.08.07, 11:03

Re: Миграция: добавления пользователя

Сообщение urichalex » 2018.09.07, 14:20

Консольным действием, к примеру

GHopper
Сообщения: 83
Зарегистрирован: 2017.06.05, 10:53

Re: Миграция: добавления пользователя

Сообщение GHopper » 2018.09.07, 14:48

urichalex писал(а):
2018.09.07, 14:20
Консольным действием, к примеру
Круто! Продолжай )
Что за действие такое?


GHopper
Сообщения: 83
Зарегистрирован: 2017.06.05, 10:53

Re: Миграция: добавления пользователя

Сообщение GHopper » 2018.09.07, 15:54

А можно как-то в формате "для тупых" ответить?
Я даже не понимаю в чем идея. Миграция не подходит, т.к. пользователи будут разными на тестовом и боевом серверах. Фикстуры там же.

urichalex
Сообщения: 970
Зарегистрирован: 2015.08.07, 11:03

Re: Миграция: добавления пользователя

Сообщение urichalex » 2018.09.07, 16:55

Типа так

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

    public function actionAddAdmin()
    {
        $login = $this->prompt('Логин:', [
            'required' => true,
            'validator' => function($value, &$error) {
                if(!preg_match('/[a-z0-9_\-]{1,32}/', $value)) {
                    $error = 'Только буквы латинского алфавита, цифры и знаки - и _. Не больше 32 символов';
                    return false;
                }
                if (User::find()->where(['login' => $value])->exists()) {
                    $error = 'Введенный логин уже существует';
                    return false;
                }
                return true;
            }
        ]);
        $email = $this->prompt('E-mail:', [
            'required' => true,
            'validator' => function($value, &$error) {
                if(!filter_var($value, FILTER_VALIDATE_EMAIL)) {
                    $error = 'Неверный формат адреса E-mail';
                    return false;
                }
                if (User::find()->where(['email' => $value])->exists()) {
                    $error = 'Введенный E-mail уже существует';
                    return false;
                }
                return true;
            }
        ]);
        $password = $this->prompt('Пароль:', [
            'required' => true,
            'validator' => function($value, &$error) {
                if(mb_strlen($value) < 4) {
                    $error = 'Не менее 4 символов';
                    return false;
                }
                return true;
            }
        ]);
        $confirmMessage = <<<EOF

===================================

Проверьте введенные данные:
Логин: {$login}
E-mail: {$email}
Пароль: {$password}

Для отмены ввода нажмите CTRL+C
EOF;
        if(!$this->confirm($confirmMessage, true)) {
            $this->stdout("Отмена. Теперь придется все заново...\n");
            return $this->actionAddAdmin();
        }
        $admin = new User();
        $admin->login = $login;
        $admin->email = $email;
        $admin->password_hash = \Yii::$app->getSecurity()->generatePasswordHash($password);
        $admin->auth_key = \Yii::$app->getSecurity()->generateRandomString(32);
        $admin->updated_at = time();
        if(!$admin->save()) {
            $this->stderr("При сохранении админа произошла одна или несколько ошибок\n");
            return ExitCode::UNSPECIFIED_ERROR;
        }
        return ExitCode::OK;
    }

GHopper
Сообщения: 83
Зарегистрирован: 2017.06.05, 10:53

Re: Миграция: добавления пользователя

Сообщение GHopper » 2018.09.07, 18:51

Спасио, теперь понятно.

Я долго не втуплял что нужно создать console-контроллер с методом добавления админа и пользовать его при деплое.

Ответить