Я создал модельный вид и контроллер для рекламы. Я хочу, чтобы дата в таблице добавлена как текущая дата. в поле зрения, генерируемое 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 -->
Вы можете сделать это в своем контроллере. Например, в yuor Controller` create 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('Ymd H:i:s')
Вы можете просто CURRENT_TIMESTAMP
в своей базе данных, но, к сожалению, он работает только в 1 строке таблицы
Я думаю, что лучше назначить значение для модели. вы можете использовать beforeSave () для назначения значения в «createtime» до сохранения модели.
на # protected / models / YourModel.php добавить метод следующим образом:
public function beforeSave(){ if($this->isNewRecord){ $this->createtime = date('Ymd H:i:s'); }else{ $this->modifiedtime = date('Ymd 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>