Как использовать уникальную проверку в Yii 2 - PullRequest
0 голосов
/ 12 октября 2018

Я хочу сделать имена пользователей и адреса электронной почты уникальными.

Я использую базу yii для разработки своего приложения.Это не работает для меня.

Username and Email has already been taken

Моя модель:

public function rules()
{
     return [
            [['username', 'email', 'password'], 'required'],
            [['username', 'email'], 'unique']
     ];
}

Мой контроллер:

public function actionCreate()
{
    $model = new Userapp();
    $post = Yii::$app->request->post('UserApp'); 
    if (Yii::$app->request->isPost && $model->validate()) {
        $model->email = $post['email'];
        $model->username = $post['username'];
        $model->password = $model->setPassword($post['password']);
        if($model->save()){
            return $this->redirect(['view', 'id' => $model->id]);
        }
    }
    return $this->render('create', [
        'model' => $model,
    ]);
}

1 Ответ

0 голосов
/ 12 октября 2018

Yii2 имеет несколько встроенных валидаторов см. .

Один из которых unique

Из документов Yii2.

// a1 должен быть уникальным в столбце, представленном атрибутом "a1"

['a1', 'unique'],

// a1 должен быть уникальным, но столбец a2 будет использоваться дляпроверьте уникальность значения a1

['a1', 'unique', 'targetAttribute' => 'a2'],

Обновление:

В своем массиве правил добавьте уникальный валидатор в email и username, например так:

public function rules()
{
     return [
        [['username', 'email', 'password'], 'required'],
        [['username', 'email'], 'unique'],
     ];

}

Затем перед сохранением модели:

if(!$model->validate()){
   return false; 
} 

Обновление 2:

Вы пытаетесь проверить модель до того, как были назначены какие-либо атрибуты.,Обновите код вашего контроллера следующим образом:

public function actionCreate()
{
    $model = new Userapp();
    $post = Yii::$app->request->post('UserApp'); 
        if (Yii::$app->request->isPost) {
             $model->email = $post['email'];
             $model->username = $post['username'];
             $model->password = $model->setPassword($post['password']);
            if($model->validate() && $model->save()){
                return $this->redirect(['view', 'id' => $model->id]);
            } 
            else {
                return false; 
             }
          }
   return $this->render('create', [
        'model' => $model,
   ]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...