0

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

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

Yii在这一点上,由于模型被传递给视图,我无法弄清楚如何使用表单来完成它,我怎样才能找到一种方法来实现这一点。所以回顾一下,

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

4

1 回答 1

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。

然后您所要做的就是将其格式化为 Date 格式,如下所示:

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

并保存模型。

--- 额外:月、日、年数组的示例 --- 这些并不是最好的方法,但就我的目的而言,它们运行良好。

    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;
    }
于 2013-01-07T18:37:31.380 回答