ホームページ > バックエンド開発 > PHPチュートリアル > ThinkPHP での addAll メソッドの使用には注意してください

ThinkPHP での addAll メソッドの使用には注意してください

WBOY
リリース: 2016-06-20 12:30:54
オリジナル
1460 人が閲覧しました

著者がプロジェクトで単純な作成問題のインターフェイスを作成していたとき、誤って ThinkPHP の 2 つの落とし穴を踏んでしまいました。これをピットと呼んでいるのは、実際にはドキュメントに不慣れなためです。インターフェイス コードは次のとおりです。

public function createProblems(){    $problems = I('json.');    if (empty($problems)) {        $this->error($problems, 'json格式不符合规范');    }    foreach ($problems as $problem) {        $data = D('Problem')->create($problem, self::OP_INSERT);        if (!$data) {            $this->error($problem, D('Problem')->getError());        }        $temp[] = $data;    }    $ret = D('Problem', 'Service')->addProblems($temp);    if ($ret === false) {        $this->error(null, '导入失败');    }    $this->success(null);}
ログイン後にコピー

インターフェイスによって完成される関数は、バッチで問題を作成することです。パラメーターは json 配列です。

最初の落とし穴 - 自動入力

自動入力を使用すると、フォーム送信項目が上書きされる可能性があります。その目的は、フォームフィールドの不正な送信を防止することです。 Model クラスの create メソッドを使用してデータ オブジェクトを作成すると、フォーム データが自動的に処理されます。

オートフィルはフォームを上書きすることが公式ドキュメントに明記されているため、投稿したパラメータに特定の値を与えてもcreateメソッド使用後に上書きされる可能性があります。 気をつけてください! ! !

2 番目の pig-addAll メソッド

addAll メソッドには Null 値を含めることはできません。そうしないと、他のデータが自動的に前方に移動し、追加が失敗します。例:

[    {        "appId": 1,        "serviceId": 2,        "createUser":null,        "status": 1,        "priority": 2    }]
ログイン後にコピー

このうち、createUserフィールドがnullとなり、挿入時のSQL文がva_problem(appId,serviceId,createUser,status,priority)の値(1,2, 1、2) 。 null 値がなくなったため、挿入が失敗します。これは ThinkPHP3.2.3 のバグです。このブログには関連する議論があります。

落とし穴を導入するプロセス

problemModel には、createUser が自動的に入力されます。

API を通じて質問を作成すると、最初に自動入力が上書きされるため、フォーム内の createUser 値が無効になります。これが最初の落とし穴です。次に、自動入力の createUser が get_username() 関数を呼び出すため、API 経由で呼び出されたときに session(username) が値を取得できないため、フィールドは作成後に "createUser":null になり、2 番目の落とし穴が生じます。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート