CodeIgniter是MVC数据操作的最佳方法

时间:2012-07-30 20:19:00

标签: php codeigniter view model

我正在使用CodeIgniter开发一个网站。这是一种基本的,除了它有一些巨大的形式(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操作。

有更好的方法吗?一些注释驱动或更有效的方式,因为我还需要用我的数据库中的数据填充整个表单。欢迎任何建议。

1 个答案:

答案 0 :(得分: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);

选择它时会爆炸它。

这可能不适用于您的情况,但在某些情况下确实有价值。

祝你的申请顺利;我希望我能帮忙!