ユーザーがログインできるプログラムがあります。User
クラスがあり、ユーザーがログインすると、すべての属性(権限、ユーザー名、実名など)がクラスプロパティとして保存されます。ただし、すべてのデータを検証する必要があるため、ユーザーに自分の情報を更新させるのが最善の方法であることに頭を悩ませています。
現在、ユーザーが自分の情報(メールアドレスなど)を更新しようとすると、次のようになります。
// Set new email
$try = $user->setEmail($_POST['new_email']);
if ($try !== true) {
$errors[] = $try;
}
...
if (isset($errors) {
// Tell user what went wrong
} else {
$user->saveValuesToDB();
}
User->setEmail()
それは正常に動作しますが、電子メールが複数の理由(ドメインが見つからない、無効な形式、空の文字列が提供されている、別のユーザーによってすでに使用されているなど)で無効になる可能性があるため、混合リターンタイプが必要なため、私にはかなり醜いようです正確な理由をユーザーに返す必要がありますが、私が理解しているように、混合リターンは一般的に推奨されていません。
私が考えたもう1つの方法は、検証を実行せずにすべてのプロパティを更新User->commitAllChanges()
し、最後にすべての検証を実行することです。これにより、すべてのsetterメソッドから複数のリターンが取得され、削減されます。 commitメソッドのみに適用されますが、実際に設定されているプロパティは有効である必要があり、それでも問題を完全に取り除くことはできないと感じているため、これも本当に好きではありません。
ユーザーがオブジェクトのプロパティを設定し、それらを検証してエラーをユーザーに返送できるようにするために使用できる他の方法は何ですか?それとも私が今やっていることはうまくいっていますか?