自動検証と自動入力は thinkphp を使用するときに頻繁に使用される機能ですが、場合によっては自動検証と自動入力が機能しない状況に遭遇することがあります。この記事では、thinkphp の自動検証と自動入力が効果がない理由についていくつかの分析を行い、対応する方法を提案します。ソリューション。
(1) create()メソッドに問題があります
ThinkPHPの自動検証と自動充填はデータオブジェクトcreate()の作成時に実装されるため、自動検証と自動充填の無効化はcreate()に大きく関係します。
create メソッドの構文は次のとおりです:
create(混合データ、文字列型)
dataは受け付けたデータを表し、typeは今回の具体的な操作(データの書き込みまたは更新)を表します。どちらのパラメータも省略できます。data パラメータを省略すると、$_POST データがデフォルトで受け入れられ、type はデフォルトでシステムによって自動的に認識されます。
しかし、システムのタイプの自動認識には欠陥があり、受信フィールドに主キーフィールドがある場合、システムはそれを更新操作として認識しますが、それ以外の場合は書き込み操作となります。したがって、主キー フィールドが自動的に拡張されず、SQL の記述が必要な場合、自動検証と自動入力が効果的でない可能性があります。
たとえば、データ レコードを追加するときに、フォームに主キー フィールドがある場合、またはシステムで主キー フィールドが生成される場合 (デバイス番号の入力など)、ThinkPHP はこの操作を更新操作であるとみなします。 、以下の自動検証と入力セットは無視されます:
protected $_validate = array(
// 新しいタイトルを追加するときに、タイトルが一意であることを確認してください
array('title','','タイトルはすでに存在します!',0,'unique',1),
};
//自動入力
protected $_auto = array(
// 新しいアイテムを追加するときにタイムスタンプを入力します
array('pubtime','time',1,'function'),
);
操作中にデータテーブルにデータを書き込むために add() 操作が実行されましたが、自動検証と自動入力が無効であることがわかります。
これが発生した場合、操作の種類を明示的に create() メソッド、つまり create($_POST,1) に渡し、この操作がデータの書き込みであることをシステムに伝えるだけで済みます。さらに、受信データが $_POST でない場合は、そのデータも create($_GET) などのパラメーターとして渡す必要があります。
(2) データフィールドが対応していません
不注意により、フォームフィールドとデータテーブルフィールドが正しく一致していませんでした。
(3) データテーブルのフィールドが変更されました
開発プロセス中に、テーブルのフィールド名が変更されましたが、キャッシュの更新が間に合わず、システムがそのフィールドを無効と判断して設定を解除しました。したがって、テーブルのフィールド名を変更した後は、[Runtime/Data] のデータ テーブル キャッシュを速やかにクリアしてください。
(4) モデル命名エラー
モデルの名前が間違っており、仕様に厳密に従っていない名前が付けられています。たとえば、最初の文字が大文字でなかったり、不注意により文字の順序が間違ったり、文字が多すぎたり少なすぎたりします。このようなエラーはモデルの失敗に直接つながることが多いため、大文字の使用には特別な注意を払う必要があります。
(5) データテーブルには自己増加するIDがありません
つまり、データテーブルに自動インクリメントされるIDがない場合、検証時に検証する必要のあるデータが見つからないため、検証は失敗します。
ThinkPHP の自動検証と自動入力が無効になる理由はいくつか考えられます。問題が発生した場合は、それらを 1 つずつ解決する必要があります。もちろん、不明なエラーもいくつかあると思います。他の理由から、以下にコメントを残してください。