我正在使用Yii的 zii.widgets.jui.CJuiDatePicker 并出现以下问题:
插入新记录或更新具有NULL日期的记录时,它可以正常工作
但是当我尝试用日期值更新记录时,我无法改变它
你知道可能会发生什么吗?
$this->widget('zii.widgets.jui.CJuiDatePicker', array(
'model' => $model,
'attribute' => 'datetime',
'name' => $model->datetime,
'options'=>array(
'showAnim'=>'fold',
'dateFormat'=>'yy-mm-dd',
'altFormat'=>'yy-mm-dd',
'changeMonth'=>'true',
'changeYear'=>'true',
'yearRange'=>'1920:2010',
'showOn'=>'both',
'buttonText'=>'...' ),
'htmlOptions'=>array( 'style'=>'height:20px;' ),
) );
虽然该字段名为 datetime ,但它实际上是一个日期MySQL字段。
答案 0 :(得分:1)
您应指定“值”属性:
$this->widget('zii.widgets.jui.CJuiDatePicker', array(
'model' => $model,
'attribute' => 'datetime',
'value' => $model->datetime,
...
答案 1 :(得分:1)
我假设您的更新操作中有这样的内容:
public function actionUpdate($id){
$model=$this->loadModel($id);
// Assuming the name of your model is DateModel
if(isset($_POST['DateModel'])){
$model->attributes = $_POST['DateModel'];
// more code to validate and save
}
// more code
}
现在,如果您检查表单视图生成的html的来源,您会看到 id 和名称您的datetime
属性的输入元素被设置为该属性的值,该值实际上是由于行'name'=>$model->datetime
而发生的。例如,它可能最终会像:
<input type="text" value="2012-02-08" name="2012-02-08" id="2012-02-08" style="height:20px;" class="hasDatepicker">
我们想要的是:
<input type="text" value="2012-02-08" name="DateModel[datetime]" id="DateModel_datetime" style="height:20px;" class="hasDatepicker">
这样我们的控制器操作就可以使用行$model->attributes = $_POST['DateModel'];
来分配属性的值
因此,一个简单的解决方案是不使用 CJuiDatePicker小部件的'name'
属性。
否则,如果您绝对需要'name'属性,则必须在控制器操作中设置日期字段,如下所示:
$model->attributes = $_POST['DateModel'];
$model->datetime = $_POST[''.$model->datetime];