我想让用户名和电子邮件地址独一无二。
我正在使用 yii base 来开发我的应用程序。它对我不起作用。

我的型号:
public function rules()
{
return [
[['username', 'email', 'password'], 'required'],
[['username', 'email'], 'unique']
];
}
Run Code Online (Sandbox Code Playgroud)
我的控制器:
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,
]);
}
Run Code Online (Sandbox Code Playgroud)
Yii2 有很多内置的验证器,请参阅。
其中之一是unique
来自 Yii2 文档。
// a1 在“a1”属性表示的列中必须是唯一的
Run Code Online (Sandbox Code Playgroud)['a1', 'unique'],// a1需要是唯一的,但a2列将用于检查a1值的唯一性
Run Code Online (Sandbox Code Playgroud)['a1', 'unique', 'targetAttribute' => 'a2'],
更新:
在您的规则数组中,添加唯一验证器,email如下username所示:
public function rules()
{
return [
[['username', 'email', 'password'], 'required'],
[['username', 'email'], 'unique'],
];
Run Code Online (Sandbox Code Playgroud)
}
然后在保存模型之前:
if(!$model->validate()){
return false;
}
Run Code Online (Sandbox Code Playgroud)
更新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,
]);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8940 次 |
| 最近记录: |