ユーザーを登録するための確認フォームがあります。このモデルの入力データの検証にはtry-catchingという概念を試しています。私が最初にあなたに私のコードをお見せしましょう:検証フォームで複数の例外をキャッチするには
モデル登録
public function register (string $username, string $email, string $email_repeat, string $password, string $password_repeat, string $ip, string $reCaptcha) {
$this->username = trim($username);
$this->email = trim($email);
$this->email_repeat = trim($email_repeat);
$this->password = $password;
$this->password_repeat = $password_repeat;
$this->ip = $ip;
$this->reCaptcha_response = $reCaptcha;
$this->reCaptcha = new ReCaptcha(GOOGLE_CAPTCHA_SECRET); //the API secret is in the config.php file
$this->verifyEmail();
$this->verifyUsername();
$this->verifyPassword();
$this->validateReCaptcha($this->reCaptcha_response, $this->ip);
$this->db->insertRow("INSERT INTO users (username, password, email) VALUES (?, ?, ?)", [$this->username, $this->password, $this->email]);
}
public function verifyEmail() {
if(empty($this->email) || empty($this->email_repeat)) {
throw new \Exception('Email address is empty');
}
$isTaken = $this->db->getRow("SELECT COUNT(*) as count FROM users WHERE email= ?", [$this->email]);
if($isTaken->count > 0){
throw new \Exception('This email is taken');
}
}
private function verifyUsername() {
if(strlen($this->username) < 3 || strlen($this->username) > 15) {
throw new \Exception('Username must be between 3 and 15 symbols');
}
$isTaken = $this->db->getRow("SELECT COUNT(*) as count FROM users WHERE username= ?", [$this->username]);
if($isTaken->count > 0){
throw new \Exception('This username is taken');
}
}
コントローラ:あなたがモデルで見ることができるように
public function register()
{
if($this->post != null) {
try {
$register = $this->tableRegister->register(
$_POST['username'],
$_POST['email'],
$_POST['email_repeat'],
$_POST['password'],
$_POST['password_repeat'],
$_SERVER['REMOTE_ADDR'],
$_POST['g-recaptcha-response']
);
} catch (\Exception $err) {
$this->flashMessage->error($err->getMessage());
}
}
$this->renderView('users/register');
}
は、両方の方法validateEmail
とvalidateUsername
がデータベースを通過しているかどうかをチェック電子メールまたはユーザー名が使用されます。両方とも奪取された場合、私は例外を捕捉したいだけでなく、電子メールを受け取った場合、ユーザ名を取得した場合、ユーザ名が無効な場合に発生する可能性があるその他の例外もすべて捕捉したい。現在、私のスクリプトは最初の例外で終了します。これどうやってするの?
ありがとうございます。私はその時点で1つのエラーを持っていることにしましたが、詳細な答えにもかかわらずありがとうございました。 – pidari
あなたは大歓迎です、@pidari。 – camelsWriteInCamelCase