Yii应用程序如何使隐藏字段的日期当前日期在创建视图


Yii app how to make hidden field for date current date in create view?

我为广告创建了模型视图和控制器。我想在添加表的日期作为当前日期。在gii生成的视图中,它显示文本输入字段。我怎么能使它隐藏,使它可以得到当前日期,而不需要从用户输入??我应该改变什么?请帮帮我。这不是一个复杂的问题,但我很困惑…由于

视图/_form.php

<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'add-form',
'enableAjaxValidation'=>false,
)); ?>
<p class="note">Fields with <span class="required">*</span> are required.</p>
<?php echo $form->errorSummary($model); ?>
<div class="row">
    <?php echo $form->labelEx($model,'username'); ?>
    <?php echo $form->textField($model,'username',array('size'=>50,'maxlength'=>50)); ?>
    <?php echo $form->error($model,'username'); ?>
</div>
<div class="row">
    <?php echo $form->labelEx($model,'addname'); ?>
    <?php echo $form->textField($model,'addname',array('size'=>60,'maxlength'=>100)); ?>
    <?php echo $form->error($model,'addname'); ?>
</div>
<div class="row">
    <?php echo $form->labelEx($model,'category'); ?>
    <?php echo $form->textField($model,'category',array('size'=>60,'maxlength'=>100)); ?>
    <?php echo $form->error($model,'category'); ?>
</div>
<div class="row">
    <?php echo $form->labelEx($model,'description'); ?>
    <?php echo $form->textField($model,'description',array('size'=>60,'maxlength'=>1000)); ?>
    <?php echo $form->error($model,'description'); ?>
</div>
<div class="row">
    <?php echo $form->labelEx($model,'city'); ?>
    <?php echo $form->textField($model,'city',array('size'=>50,'maxlength'=>50)); ?>
    <?php echo $form->error($model,'city'); ?>
</div>
<div class="row">
    <?php echo $form->labelEx($model,'address'); ?>
    <?php echo $form->textField($model,'address',array('size'=>60,'maxlength'=>500)); ?>
    <?php echo $form->error($model,'address'); ?>
</div>
<div class="row">
    <?php echo $form->labelEx($model,'mobile'); ?>
    <?php echo $form->textField($model,'mobile',array('size'=>60,'maxlength'=>100)); ?>
    <?php echo $form->error($model,'mobile'); ?>
</div>
<div class="row">
    <?php echo $form->labelEx($model,'email'); ?>
    <?php echo $form->textField($model,'email',array('size'=>60,'maxlength'=>100)); ?>
    <?php echo $form->error($model,'email'); ?>
</div>
<div class="row">
    <?php echo $form->labelEx($model,'image'); ?>
    <?php echo $form->textField($model,'image',array('size'=>60,'maxlength'=>100)); ?>
    <?php echo $form->error($model,'image'); ?>
</div>
<div class="row">
    <?php echo $form->labelEx($model,'price'); ?>
    <?php echo $form->textField($model,'price',array('size'=>60,'maxlength'=>100)); ?>
    <?php echo $form->error($model,'price'); ?>
</div>
<div class="row">
    <?php echo $form->labelEx($model,'createtime'); ?>
    <?php echo $form->textField($model,'createtime'); ?>
    <?php echo $form->error($model,'createtime'); ?>
</div>
<div class="row buttons">
    <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
</div>
<?php $this->endWidget(); ?>
</div><!-- form -->

你可以在你的控制器中这样做。例如在你的控制器中创建action

 public function actionCreate()
 {
 $model=new Product;
 $model->createtime = strtotime('Now');
 if(isset($_POST['Product']))
 {........}
 .......
 }

并删除_from.php

 <div class="row">
  <?php echo $form->labelEx($model,'createtime'); ?>
  <?php echo $form->textField($model,'createtime'); ?>
  <?php echo $form->error($model,'createtime'); ?>
 </div>

代替

<?php echo $form->textField($model,'createtime'); ?>
使用

<?php echo $form->hiddenField($model,'createtime'); ?>

或者在您的模型中,您可以在afterConstruct()中设置默认值:

protected function afterConstruct() {
    parent::afterConstruct();
    if($this->hasAttribute('createtime') && empty($this->createtime))
        $this->createtime = new Date();

另一种方法是将数据库中的默认值设置为CURRENT_TIMESTAMP

简单使用:

date('Y-m-d H:i:s')

您可以简单地在数据库中CURRENT_TIMESTAMP,但不幸的是,它只适用于表中的1行

我认为最好把assign value放在Model上。你可以使用beforeSave()在模型保存之前给'createtime'赋值。

在# protected/models/YourModel.php上添加如下方法:

public function beforeSave(){
    if($this->isNewRecord){
        $this->createtime = date('Y-m-d H:i:s');
    }else{
        $this->modifiedtime = date('Y-m-d H:i:s'); 
       //just case if you have modifiedtime field 
    }
    return parent::beforeSave();
} 

之后,从视图中删除这段代码。

<div class="row">
     <?php echo $form->labelEx($model,'createtime'); ?>
     <?php echo $form->textField($model,'createtime'); ?>
     <?php echo $form->error($model,'createtime'); ?>
</div>