2017-03-06 9 views
2

私はYii2を学んでいます。私はYii基本プロジェクトに登録しようとしています。問題は、私のDB内のユーザー入力(私の場合は電子メールとURL)からのデータの存在を確認できず、すべてのユーザーに固有の電子メールを作成できないことです。Yii2を使用してデータベースにデータの存在を確認する方法は?

public function actionRegistration() 
{ 
    $model = new RegistrationForm(); 

    if ($model->load(Yii::$app->request->post()) && $model->validate()) 
    {   
     if (Users::findOne($model->email) !== null)//Doesn't work 
      $error_email = "That email is taken. Try another."; 
     if (Users::findOne($model->url) !== null)//Doesn't work 
      $error_url = "That url is taken. Try another."; 

     if (!(isset($error_email) || isset($error_url))) 
     { 
      $db = new Users(); 
      $db->name = $model->name; 
      $db->email = $model->email; 
      $db->password = $model->password; 
      $db->url = $model->url; 
      $db->save(); 
     } 
     else 
     { 
      return $this->render('registration', 
        [ 
         'model' => $model, 
         'error_email' => $error_email, 
         'error_url' => $error_url, 
        ] 
       ); 
     } 
    } 
    else 
    { 
     return $this->render('registration', 
       [ 
        'model' => $model, 
       ] 
      ); 
    } 
} 

答えて

2

簡単な方法が設定されている検証ルールを返し

Users::find()->where(['email' => $model->email])->exists(); 

モデル:

class RegistrationForm extends \yii\db\ActiveRecord { 

... 

public function rules(){ 
    return [ 
     ['email', 'filter', 'filter' => 'trim'], 
     ['email', 'email'], 
     ['email', 'unique', 'targetClass' => '\common\models\Users', 'message' => 'This address is use.'], 
    ]; 
} 

とコントローラ

public function actionRegistration() { 
$model = new RegistrationForm(); 

if ($model->load(Yii::$app->request->post()) && $model->validate()) {   

     $db = new Users(); 
     $db->name = $model->name; 
     $db->email = $model->email; 
     $db->password = $model->password; 
     $db->url = $model->url; 
     $db->save(); 
} else { 

    return $this->render('registration', 
      [ 
       'model' => $model, 
      ] 
     ); 
} 

}

マジックは$モデル - >検証()

http://www.yiiframework.com/doc-2.0/guide-input-validation.html

01であります

この例では、すべてのデータでループ要求と応答が発生します。 $ model-> ajaxによるチェックを検証し、PHPリクエストの送信リクエストを防ぎます。

+0

クール!あなたはAJAXのバリデーションで同じことをする方法を説明できますか? – yutsura

+0

そして、URLフィールドのための 'ユニークな'バリデータを作る方法は? – yutsura

2
Users::find()->where(['email' => $model->email])->exists(); 
3

findOne()ニーズのために主キー(tipically ID)に基づいていますが

Users::findOne(['email' => $model->email]); 

またはより良い

Users::find()->where(['email' => $model->email])->one(); 

one()を使うべきモデル

を返します。

あなたも使用することができますが存在する()モデルにブール

+0

なぜdownvote ??? – scaisEdge

+0

私は知らない、私は – yutsura

+0

@yutsura大丈夫をupvotedしました..コメントはあなたのためではなく、誰がdownvoteのために、動機付けを残していない.. ..公正ではない "石を投げ、手を隠す" – scaisEdge

関連する問題