1

CodeIgniter で Web サイトを開発しています。いくつかの巨大なフォーム (150 フィールド) があり、動的に作成/ロック/事前定義/削除されていることを除けば、一種の基本的なものです。

フォームとデータベースの間の移行に問題がありますが、これはもちろん非常に複雑です。つまり、フォームを送信すると、一部のテーブルに複数の行が挿入され、一部のデータは保存されません。(いくつかのラジオボタンなど..)

$_POST以下を使用してデータを入力するために、フォーム入力名にちなんで名付けられたできるだけ多くのプロパティを持つ非常に大きなオブジェクトを作成しました。

foreach ($largeObj as $key=>$value)
{
  if (isset($_POST[$key])){
    $largeObj[$key]=$value; //mind the data escaping 
  }
}

もちろん、これは入力の半分でしか機能しません。他の入力については、次のようにする必要があります。

$largeObj['tanks']=Array();
for ($i=0;$i<$_POST['nbrTanks'];$i++){
    $tank=new Tank();
    // some if's in order to set some properties
    $largeObj['tanks'][]=$tank;
}

次に、すべての計算を行い、対応するデータを各テーブルに挿入するように DTO を準備します。ところで、PHPDAO を使用してデータベース テーブルをマップしました。これは、CRUD 操作全体を記述するには大きすぎるためです。

より良いアプローチはありますか?DB からのデータをフォーム全体に入力する必要があるため、アノテーション駆動型またはより効率的な方法です。どんな提案でも大歓迎です。

4

1 に答える 1

1

いずれかのメソッドに送られる入力のリストがある場合は、次のようにすることができます。

##Array of items to be checked with `isset()`
$array_isset = array('field1', 'field2', 'field3');
foreach ($array_isset as $line) {
   #.... same thing you did before
}

$array_tank = array('field4', 'field5', 'field6'); 
foreach ($array_tank as $line) {
   $tank = new Tank()
}

あなたの質問を理解できれば、上記の方法を使用すると、フィールドに対して実行する必要がある操作でフィールドを並べ替えることができます。

そうは言っても、大量の情報を処理しなければならないプロジェクトが複数ありました。私が毎回見つけたのは、生データをデータベースに入れ、後で計算を実行する方法を見つけることが最善のアプローチであるということでした.

CodeIgniter では、次のように実行できるため、これも簡単になります。

$array = $this->input->post(NULL, True);
$this->db->insert('table', $array);

フォーム フィールドがデータベースの列名と一致する場合。

データのリストがある場合は、次のようにカンマ区切りのリストとしてデータを保存できます。

$array = array('value1', 'value2', 'value3');
$insert_string = implode(',', $array);

選択すると爆発します。

これはあなたの状況ではうまくいかないかもしれませんが、特定の状況では価値があります。

あなたのアプリケーションを頑張ってください。お役に立てば幸いです!

于 2012-07-30T22:12:00.177 に答える