1

Codeigniter の Datamapper で長い形式を保存しようとしています。このような値を渡すと、フォームを保存できます

$t->brandName = $this->input->post('brandName');  
$t->specialNotes = $this->input->post('specialNotes');
$t->name = $this->input->post('name');

今私がsaveメソッドを呼び出すと、それは動作します

 $t->save();

フォームが大きいので foreach にオブジェクトの値を追加してみました

 $a = get_object_vars($t);
 foreach ($a['stored'] as $k => $val){
      $t->$k = $this->input->post("$k"); 
 }

ただし、呼び出して $t->save()も機能しません。

4

1 に答える 1

1

が何$a['stored']を表しているのかわかりませんが、Datamapper のデフォルトは何もありません。

逆にポストキーをループしてみませんか?

foreach ($_POST as $key => $val)
{
    $t->$key = $this->input->post($key); 
}
$t->save();

注: 存在しない列は、Datamapper によって無視されます。


私は実際にこれのために Datamapper 拡張機能を書きました:

class DM_Data {

    function assign_postdata($object, $fields = NULL)
    {
        // You can pass a different field array if you want
        if ( ! $fields)
        {
            $fields = $object->validation;
        }
        foreach ($fields as $k => $data)
        {
            $rules = isset($data['rules']) ? $data['rules'] : array();

            if ( ! isset($_POST[$k])) continue;

            // Cast value to INT, usually for an empty string.
            if (in_array('integer', $rules))
            {
                $object->$k = (integer) $_POST[$k];
            }
            // Do other manipulation here if desired
            else
            {
                $object->$k = $_POST[$k];
            }

        }
        return $object;
    }

}

を使用$t->assign_postdata()->save()し、必要に応じてフィールドの配列を渡して関数に更新することができます (datamapper 検証形式)。しかし、なぜそれを使用するのか忘れてしまいました...しかし、カスタムのものをいくつか削除しました。これは、これを頻繁に行う場合に役立ちます。それは間違いなく私の時間を節約します。

于 2011-05-11T18:30:46.113 に答える