You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.4 KiB
58 lines
1.4 KiB
<?php |
|
namespace frontend\models; |
|
|
|
use yii\base\Exception; |
|
use yii\base\Model; |
|
use core\entities\user\User; |
|
use Yii; |
|
|
|
/** |
|
* Signup form |
|
*/ |
|
class SignupForm extends Model |
|
{ |
|
public string $username; |
|
public string $email; |
|
public string $password; |
|
|
|
/** |
|
* @inheritdoc |
|
*/ |
|
public function rules(): array |
|
{ |
|
return [ |
|
['username', 'trim'], |
|
['username', 'required'], |
|
['username', 'unique', 'targetClass' => User::class, 'message' => Yii::t('auth', 'This username has already been taken.')], |
|
['username', 'string', 'min' => 2, 'max' => 255], |
|
|
|
['email', 'trim'], |
|
['email', 'required'], |
|
['email', 'email'], |
|
['email', 'string', 'max' => 255], |
|
['email', 'unique', 'targetClass' => User::class, 'message' => Yii::t('auth', 'This email address has already been taken.')], |
|
|
|
['password', 'required'], |
|
['password', 'string', 'min' => 6], |
|
]; |
|
} |
|
|
|
/** |
|
* @return User|null |
|
* @throws Exception |
|
*/ |
|
public function signup(): ?User |
|
{ |
|
if (!$this->validate()) { |
|
return null; |
|
} |
|
|
|
$user = new User(); |
|
$user->username = $this->username; |
|
$user->email = $this->email; |
|
$user->setPassword($this->password); |
|
$user->generateAuthKey(); |
|
|
|
return $user->save() ? $user : null; |
|
} |
|
}
|
|
|