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可能是一个更好的主意。