控制器中模型创建的参数太多了?

时间:2013-02-20 17:42:10

标签: php kohana kohana-orm kohana-3.2

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();,但仍然无法理解它是如何工作的,因为你可以看到我有不同的发布参数的键,这可能会被考虑。

在许多例子中,所有的数据都是在控制器中进行的,但是它们真的很小,在我的情况下我会假设有一个带有大量数据分配字符串的巨大控制器,这将是一个糟糕的样式编码我认为

1 个答案:

答案 0 :(得分:0)

无论您做什么,都需要将$_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()的第二个参数来限制表单可以更改的内容。