0

Cakephp には、データベースにレコードを挿入するためのデフォルトの保存コマンドがあることは周知のとおりです。しかし、cakephp で独自の保存コマンドを作成したり、既存の保存コマンドを変更したりできることを知りたいです。これはできますか?

なぜ私がそんなことを言っているのですか?これについて実際の例を挙げましょう---- ユーザーが入力したユーザー名を含むテキストボックスがあるとします. .

Ex-私の名前はプラカシュ・グプタで、ユーザー名は「プラカシュ」です。名前が prakash gupta である可能性がある他のユーザーも存在し、同じユーザー名を提供します。これを解決するために、ランダム関数を使用し、ユーザー名の後ろにいくつかの数字を付けて、ユーザーごとに異なるようにします。「保存」コマンドは、テキストボックスに入力したユーザー名を取得してデータベースに挿入しますが、変更したユーザー名をランダム関数で生成したデータベースに挿入したいと考えています。これは可能ですか?はいの場合はお知らせください....

4

1 に答える 1

0

通常、標準のものを変更するのではなく、別のものを追加するか、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チェックを追加して、フィールドを検証することで結果をすぐに表示できるようにします。

于 2012-10-18T08:24:33.940 に答える