2012-03-26 10 views
1

datamapperオブジェクトを1つずつ割り当てるのではなく、自動的に/動的にすべての属性を設定する方法はありますか?Codeigniter Datamapperは、投稿データからオブジェクト属性を設定します

私のフォームフィールド名は、datamapperモデルの属性とまったく同じです。

だから、これを行うには短い方法があります:

function add() { 
if($this->input->post('client-add')) { 
$c = new Client(); 
$c->name = $this->input->post('name'); 
$c->email = $this->input->post('email'); 
// and so on for about 20 more properties 

$c->save(); 
    }} 

答えて

1

あなたは、単にループでそれを実行する必要があります。

function add() { 
    if ($this->input->post('client-add')) { 
     $c = new Client(); 
     $fields = array('name', 'email', 'and', 'so', 'on'); 

     foreach ($fields as $field) { 
      $c->$field = $this->input->post($field); 
     } 

     $c->save(); 
    } 
} 
1

だけでなく、あなたはオールウェイズのように、任意のパラメータなしでポストを使用することができます:

function add() 
{ 
    if($this->input->post('client-add')) { 
     $c = new Client($this->input->post()); 
    } 
    $c->save(); 
} 

主な問題は、クライアントローダーが配列の 'client-add'フィールドも取得することです。しかし、クラスローダーの入力を制御する必要があります。

+1

私はcodeigniter datamapperから配列ヘルパーをインストールすることになり、$ c = from_array($ this-> input-> post()); $ c-> save(); – Simon