在我的数据库中,我有一个类型为dob
的出生日期(date
)字段。
当我从表中创建模型时,它会为dob
创建一个属性
我
因此,当我从模型中生成表单时,它有一个可以收集的字段
用户的出生日期。我想要的是有3个下拉元素
每个月和每年。然后,当我提交表格时,他们都得到了捆绑
一起作为dd-mm-yyyy
并填充到我的模型属性“dob
”
此时我无法弄清楚自模型以来如何使用Yii
形式
传递给视图,我怎样才能找到实现这一目标的方法。所以回顾一下,
- 我想在User
表格中只有一个字段dob
作为date
类型
- 我想在我提交的Yii
生成的表单中有3个下拉列表
形成我的dob
并填入$model->user_dob
答案 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;
}