通常、標準のものを変更するのではなく、別のものを追加するか、beforeSaveなどのフックを使用します。
保存機能はモデルの一部です。通常、次のように変更します。動作。参照:http ://book.cakephp.org/2.0/en/models/behaviors.htmlモデルに直接コーディングしなくても、モデルの変更や保存などを行うことができます。
編集に基づく:
一意性制約
ご覧のとおり、一意のユーザー名が必要です。そのための複数の解決策があります。まず、必ず制約を設定してください。random()トリックでも重複が生成される可能性があります。これは、randomでも同じものが作成される可能性があるためです。したがって、username.random(4)は複数回生成される可能性があります:username1234。確信が持てません。
制約は、たとえばモデルレベルで設定する必要があります。CakePHPの検証からこのユニークなチェックを始めましょう。
ユーザー名がすでに使用されていることをいつ知っていますか
検証がいつ失敗したかがわかります。したがって、最初にレコードを検証します。したがって、呼び出しmodel :: validate()を保存する前に、一意の制約に問題がないかどうかを確認してください。はいの場合は保存してください。
http://book.cakephp.org/2.0/en/models/data-validation.html
そうでない場合は、ランダムな文字列を追加してもう一度確認できます。model :: validateを呼び出して、問題がないかどうかを確認します。この部分は、たとえば、beforeSave()メソッドの動作で実装できます。
今、あなたはあなたの記録を保存するユニークなものを持っています。その間にそのユーザー名の別のレコードが追加された可能性があるため、成功したかどうかを必ず確認してください。その場合は、プロセスを再実行してください。
多くの作業
複数のクライアントが、知らないうちにデータベースに同時にデータを追加する可能性があるため、困難です。最も簡単なのはエラーをキャッチすることなので、ユーザー名を指定してsaveを呼び出すだけです。一意の制約が原因で失敗した場合は、random()文字列を追加して、何度も再試行してください。保存できるはずです。ランダムな文字列をここでだましてください。文字列が短く、ユーザー名が頻繁に使用されていると、問題が発生する可能性があるためです。乱数が3つの数字の場合、同じユーザー名を000から999まで1000回持つことができます。
その他のオプション
時々表示されるのは提案です。インターフェースは、ユーザー名の入力に基づいていくつかのフリーネームを提案します。ただし、まだチェックが必要です。
別のオプション
使用中であることをユーザーに伝えるだけです。たぶん、ajaxチェックを追加して、フィールドを検証することで結果をすぐに表示できるようにします。