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

Forms Yii框架-使用3下拉列表收集出生日期,然后转换为日期Obj,forms,data-binding,yii,Forms,Data Binding,Yii,在我的数据库中,我有一个出生日期(dob)字段,类型为date。 当我从表中创建模型时,它为 我 因此,当我从模型生成表单时,它有一个字段可以收集 用户的出生日期。我想要的是有3个下拉元素 每月和每年的每一天。然后,当我提交表格时,他们都会收到一个包裹 作为dd-mm-yyyy一起升级,并填充到我的模型属性“dob” 在这一点上,我不知道如何使用Yii表单来实现它,因为该模型 传递给视图时,如何找到实现此操作的方法。总而言之 -我想在我的User表中只为dob设置一个字段作为date类型 -我想

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

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

在这一点上,我不知道如何使用
Yii
表单来实现它,因为该模型 传递给视图时,如何找到实现此操作的方法。总而言之

-我想在我的
User
表中只为
dob
设置一个字段作为
date
类型 -我想在我的
Yii
生成的表单中有3个下拉列表,它们在提交时
从我的
dob
表格中填充到
$model->user\u dob
中,这真的很奇怪。。。今天早些时候我也做了类似的事情。我发现人们没有正确使用日期选择器,所以我更喜欢使用下拉列表

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

创建下拉列表的示例:

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;
然后保存模型

---额外:月、日、年数组示例--- 这并不是最好的方法,但就我而言,它们工作得很好

    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;
    }
公共函数getMonthsArray()
{
对于($monthNum=1;$monthNum'月:')+$monthNum;
}
公共函数getDaysArray()
{
对于($dayNum=1;$dayNum'Day:'))+$days;
}
公共函数getYearsArray()
{
$thisYear=日期('Y',时间());
对于($eargerum=$thiseyear;$eargerum>=1920;$eargerum--){
$years[$eargerum]=$eargerum;
}
返回数组(0=>Year:')+$years;
}

您不能使用吗?您可以在更改或提交时解析下拉列表,创建与您的模型和格式相匹配的新隐藏字段,尽管我认为使用CJuiDatePicker可能是一个更好的主意。