php - Yii2 save image to database as base64 -
i trying save image base64 database. when submit form getting image null. couldn't understand what's wrong.
view:
<div class="content"> <?php $form = activeform::begin([ 'id' => 'products-add-form', 'action' => ['products/product-add-form'], 'method' => 'post', 'options' => [ 'class' => 'products-tbl-style', 'enctype' => 'multipart/form-data', ] ]); ?> <?= $form->field($model, 'productname'); ?> <?= $form->field($model, 'cost'); ?> <?= $form->field($model, 'available')->dropdownlist(['y' => 'yes', 'n' => 'no']); ?> <?= $form->field($model, 'image')->fileinput(['class'=>'btn btn-primary']); ?> <?= html::submitbutton('save', ['class'=>'btn btn-success products-save-btn']); ?> <?php activeform::end(); ?> </div> controller:
if($model->load(yii::$app->request->post())){ $file = uploadedfile::getinstance($model,'image'); var_dump($file->name); var_dump($file); var_dump($_files); } model:
public function rules() { return [ [['productname', 'cost', 'available', 'image'], 'required'], [['cost'], 'number'], [['available'], 'string', 'max' => 1], [['image'], 'string'], [['productname'], 'string', 'max' => 100] ]; } here jquery code, submitting form data via ajax, cause problem?
js:
$("form#products-add-form").on('beforesubmit', function(e){ var form = $(this); $.post( form.attr('action'), form.serialize() ) .done(function(result){ if(result == 1){ form.trigger("reset"); $.pjax.reload({container:'#products-table'}); $.notify({ icon: "pe-7s-check", message: "new product added" },{ type: type[2], timer: 10, placement: { from: 'top', align: 'right' } }); } else { alert(result); } }).fail(function(){ console.log("server error"); }); return false; });
to send files via ajax shoud use formdata. construct formdata object contains data existing <form>, specify form element when creating formdata object:
$("form#products-add-form").on('beforesubmit', function(e){ $.post( form.attr('action'), new formdata(this) /* form object */ ) /* other code here */ }); upd: ts mentioned should processdata set false. it's impossible set $.post, need use $.ajax
Comments
Post a Comment