A有很多控制器,我必须在其中保存/创建新模型,它看起来像这样:
public Controller_Test extends Controller_Template {
if ($post = $this->request->post()) {
$model = ORM::factory('model');
$model->param1 = $post['Param1'];
$model->param2 = $post['Param26'];
$model->param3 = $post['Param31'];
$model->param4 = $post['Param13'];
$model->param5 = $post['Param2'];
$model->param6 = $post['Param35'];
$model->param7 = $post['Param10'];
$model->param8 = $post['Param22'];
$model->param9 = $post['Param3'];
$model->save();
}
}
有可能统一(创建一个方法)来保存所有数组吗?
我知道$model->values($post)->create();
,但仍然无法理解它的工作原理,因为你可以看到我有不同的已发布参数键,这可能会被考虑。
在许多例子中,所有的数据赋值都发生在控制器中,但它们真的很小,在我的情况下,我假设有一个巨大的控制器,有很多数据赋值字符串,我认为这将是一种糟糕的编码风格。
无论您需要什么,都可以将$_POST
变量中的键名称映射到模型属性名称。
$model_post_map = array(
'param1' => 'Param1',
'param2' => 'Param26',
'param3' => 'Param31',
'param4' => 'Param13',
'param5' => 'Param2',
'param6' => 'Param35',
'param7' => 'Param10',
'param8' => 'Param22',
'param9' => 'Param3',
);
$post_model_map = array_flip($model_post_map);
function rekey($arr, $map) {
$newarr = array();
foreach ($arr as $k => $v) {
if (isset($map[$k])) {
$newarr[$map[$k]] = $v;
}
}
return $newarr;
}
$modeldata = rekey($post, $post_model_map);
$model->values($modeldata);
您应该以创建模型的方式命名表单字段,以减少阻抗失配。
您还应该使用$model->values()
的第二个参数来限制窗体可以更改的内容。