GenericForm
Yii required a form model to startup with. This could be an overhead if you just wanto ask for 2 input for example. GenericForm is here for this purpose.
Its structure is basic and straightforward, support 5 variables, 1 file upload and 1 image upload. No rules and validation included, you will need to do that manually in your code.
<?php
class GenericForm extends CFormModel
{
public $uploadPath;
public $uploadFile_value;
public $imageFile_value;
public $var1;
public $var2;
public $var3;
public $var4;
public $var5;
public function init()
{
$this->uploadPath = Yii::getPathOfAlias('uploads') . DIRECTORY_SEPARATOR . 'generic';
}
public function attributeLabels()
{
return array(
'uploadFile_value' => Yii::t('core', 'Upload File'),
'imageFile_value' => Yii::t('core', 'Image'),
'var1' => Yii::t('core', 'Var 1'),
'var2' => Yii::t('core', 'Var 2'),
'var3' => Yii::t('core', 'Var 3'),
'var4' => Yii::t('core', 'Var 4'),
'var5' => Yii::t('core', 'Var 5'),
);
}
}
You can extend the form to set labels. This piece of code can either in a new model or simply at the bottom of your Controller where it is use. e.g.:
class ReviewClaimForm extends GenericForm
{
public function attributeLabels()
{
return array(
'var1' => Yii::t('core', 'Organization / Team / Project'),
'var2' => Yii::t('core', 'Note to applicant'),
'var3' => Yii::t('core', 'Remark'),
);
}
}
Your controller would be something like:
$submission = $backend->loadModel($id);
$model = new ReviewClaimForm;
$model->var1 = $submission->jsonArray_data->startup;
// var2: text_note
$model->var2 = $submission->jsonArray_extra->text_note;
// var3: remark
$model->var3 = $submission->jsonArray_extra->remark;
if (isset($_POST['ReviewClaimForm'])) {
$submission->jsonArray_extra->text_note = $_POST['ReviewClaimForm']['var2'];
$submission->jsonArray_extra->remark = $_POST['ReviewClaimForm']['var3'];
}
In view:
<?php $form = $this->beginWidget('ActiveForm', array(
'id' => 'review-form',
// Please note: When you enable ajax validation, make sure the corresponding
// controller action is handling ajax validation correctly.
// There is a call to performAjaxValidation() commented in generated controller code.
// See class documentation of CActiveForm for details on this.
'enableAjaxValidation' => false,
'htmlOptions' => array(
'class' => 'crud-form',
'role' => 'form',
'enctype' => 'multipart/form-data',
)
)); ?>
<div class="modal-body">
<?php if ($model->hasErrors()): ?>
<?php echo $form->bsErrorSummary($model); ?>
<?php endif; ?>
<div class="form-group <?php echo $model->hasErrors('var1') ? 'has-error' : '' ?>">
<?php echo $form->bsLabelFx0($model, 'var1'); ?>
<div class="">
<div class="form-control form-control-holder"><?php echo $model->var1 ?></div>
</div>
</div>
<div class="form-group <?php echo $model->hasErrors('var2') ? 'has-error' : '' ?>">
<?php echo $form->bsLabelFx0($model, 'var2'); ?>
<div class="">
<?php echo $form->bsHtmlEditor($model, 'var2', array('toolbar' => 'Mini', 'height' => '100px')); ?>
<?php echo $form->bsError($model, 'var2'); ?>
</div>
</div>
<div class="form-group <?php echo $model->hasErrors('var3') ? 'has-error' : '' ?>">
<?php echo $form->bsLabelFx0($model, 'var3'); ?>
<div class="">
<?php echo $form->bsHtmlEditor($model, 'var3', array('toolbar' => 'Mini', 'height' => '100px')); ?>
<?php echo $form->bsError($model, 'var3'); ?>
</div>
</div>
</div>
<div class="modal-footer">
<?php echo $form->bsBtnSubmit(Yii::t('atas', 'Confirm Review')); ?>
<?php echo Html::btnDefault(Yii::t('atas', 'Cancel'), $this->createUrl('claim/admin')); ?>
</div>
<?php $this->endWidget(); ?>
Another use case, on receiving file upload in Controller:
$model = new GenericForm;
$model->uploadFile_value = UploadedFile::getInstanceByName('file');
if (is_object($model->uploadFile_value)) {
$zip = new ZipArchive;
$resource = $zip->open($model->uploadFile_value->tempName);
if ($resource === true) {
$zip->extractTo(Yii::getPathOfAlias('modules'));
$zip->close();
}
}
Last updated
Was this helpful?