Yii框架 - 使用3下拉,然后转换为日期Obj来收集出生日期

时间:2013-01-07 16:30:41

标签: forms data-binding yii

在我的数据库中,我有一个类型为dob的出生日期(date)字段。 当我从表中创建模型时,它会为dob创建一个属性 我

因此,当我从模型中生成表单时,它有一个可以收集的字段 用户的出生日期。我想要的是有3个下拉元素 每个月和每年。然后,当我提交表格时,他们都得到了捆绑 一起作为dd-mm-yyyy并填充到我的模型属性“dob

此时我无法弄清楚自模型以来如何使用Yii形式 传递给视图,我怎样才能找到实现这一目标的方法。所以回顾一下,

- 我想在User表格中只有一个字段dob作为date类型 - 我想在我提交的Yii生成的表单中有3个下拉列表  形成我的dob并填入$model->user_dob

1 个答案:

答案 0 :(得分:2)

这真的很奇怪......我今天早些时候做过类似的事情。我发现人们没有正确使用日期选择器,所以我更喜欢使用下拉。

在模型中声明月,日和年的虚拟字段,添加验证规则,然后为每个字段创建一个下拉列表。

创建下拉列表的示例:

echo CHtml::activeDropDownList($model, 'month', $monthsArray);
echo CHtml::activeDropDownList($model, 'day', $daysArray);
echo CHtml::activeDropDownList($model, 'year', $yearsArray);

您需要使用要作为选项提供的月,日和年填充数组。这似乎超出了你的问题的范围,但为了以防万一,我将在最后包含示例函数。

然后在表格控制器中,当你这样做时:

$model->attributes = $_POST['User'];

这些值应添加到$ model-> month,$ model-> day和$ model-> year。

然后您要做的就是将日期格式格式化为:

$model->dob = $model->year . '-' . $model->month . '-' . $model->day;

并保存模型。

--- extra:月,日,年阵列的例子--- 这些并不是最好的方式,但就我的目的而言,它们运作良好。

    public function getMonthsArray()
    {
        for($monthNum = 1; $monthNum <= 12; $monthNum++){
            $months[$monthNum] = date('F', mktime(0, 0, 0, $monthNum, 1));
        }

        return array(0 => 'Month:') + $months;
    }

    public function getDaysArray()
    {
        for($dayNum = 1; $dayNum <= 31; $dayNum++){
            $days[$dayNum] = $dayNum;
        }

        return array(0 => 'Day:') + $days;
    }

    public function getYearsArray()
    {
        $thisYear = date('Y', time());

        for($yearNum = $thisYear; $yearNum >= 1920; $yearNum--){
            $years[$yearNum] = $yearNum;
        }

        return array(0 => 'Year:') + $years;
    }