Yii2 DynamicForm 输入文件图像始终为空或 NULL
Yii2 DynamicForm Input File Image always empty or NULL
我正在使用 wbraganca yii2-dynamicform 和 kartik yii2-widget-fileinput。表单工作正常,但当我尝试使用 getinstance 上传图像时,图像始终为空。
这是我的控制器。
public function addMultipleImage($model){
$modelsOptionValue = Model::createMultiple(OptionValue::classname());
Model::loadMultiple($modelsOptionValue, Yii::$app->request->post());
foreach ($modelsOptionValue as $index => $modelOptionValue) {
$modelOptionValue->sort_order = $index;
$file[$index]= UploadedFile::getInstanceByName("OptionValue[".$index."][upload_image]");
var_dump($file[$index]);
if($file[$index]){
$ext = end((explode(".", $file[$index]->name)));
// generate a unique file name
$modelOptionValue->img= Yii::$app->security->generateRandomString().".{$ext}";
$path[$index]= Yii::getAlias ('@web') ."/img/". $modelOptionValue->img;
}else{
return false;
}
}
查看表格
//_form.php
<?php $form = ActiveForm::begin( [
'enableClientValidation' => false,
'enableAjaxValidation' => true,
'validateOnChange' => true,
'validateOnBlur' => false,
'options' => [
'enctype' => 'multipart/form-data',
'id' => 'dynamic-form'
]
]);
?>
//_form_add_image.php
<?php DynamicFormWidget::begin([
'widgetContainer' => 'dynamicform_wrapper',
'widgetBody' => '.form-options-body',
'widgetItem' => '.form-options-item',
'min' => 1,
'insertButton' => '.add-item',
'deleteButton' => '.delete-item',
'model' => $modelsOptionValue[0],
'formId' => 'dynamic-form',
'formFields' => [
'upload_image'
],
]); ?>
<?= $form->field($modelOptionValue, "[{$index}]upload_image")->label(false)->widget(FileInput::classname(), [
'options' => [
'multiple' => false,
'accept' => 'image/*',
'class' => 'optionvalue-img'
],
'pluginOptions' => [
'previewFileType' => 'image',
'showCaption' => false,
'showUpload' => false,
'browseClass' => 'btn btn-default btn-sm',
'browseLabel' => ' Seleccionar Imagen',
'browseIcon' => '<i class="glyphicon glyphicon-picture"></i>',
'removeClass' => 'btn btn-danger btn-sm',
'removeLabel' => ' Borrar',
'removeIcon' => '<i class="fa fa-trash"></i>',
'previewSettings' => [
'image' => ['width' => '138px', 'height' => 'auto']
],
'initialPreview' => $initialPreview,
'layoutTemplates' => ['footer' => '']
]
]) ?>
和我的模特
public $upload_image;
/**
* @inheritdoc
*/
public static function tableName()
{
return 'option_value';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['upload_image'], 'file', 'extensions' => 'png, jpg', 'skipOnEmpty' => true],
[['id_montacarga', 'sort_order'], 'integer']
];
}
yii2日志截图。已更新
检查元素截图
谢谢!!!
在ActiveForm
中添加'enctype' => 'multipart/form-data'
。
<?php $form = ActiveForm::begin([
'options' => [
'enctype' => 'multipart/form-data',
'id' => 'dynamic-form'
]
]); ?>
如果您不需要 ajax 验证,请将 Ajax 验证设置为 false。
我正在使用 wbraganca yii2-dynamicform 和 kartik yii2-widget-fileinput。表单工作正常,但当我尝试使用 getinstance 上传图像时,图像始终为空。
这是我的控制器。
public function addMultipleImage($model){
$modelsOptionValue = Model::createMultiple(OptionValue::classname());
Model::loadMultiple($modelsOptionValue, Yii::$app->request->post());
foreach ($modelsOptionValue as $index => $modelOptionValue) {
$modelOptionValue->sort_order = $index;
$file[$index]= UploadedFile::getInstanceByName("OptionValue[".$index."][upload_image]");
var_dump($file[$index]);
if($file[$index]){
$ext = end((explode(".", $file[$index]->name)));
// generate a unique file name
$modelOptionValue->img= Yii::$app->security->generateRandomString().".{$ext}";
$path[$index]= Yii::getAlias ('@web') ."/img/". $modelOptionValue->img;
}else{
return false;
}
}
查看表格
//_form.php
<?php $form = ActiveForm::begin( [
'enableClientValidation' => false,
'enableAjaxValidation' => true,
'validateOnChange' => true,
'validateOnBlur' => false,
'options' => [
'enctype' => 'multipart/form-data',
'id' => 'dynamic-form'
]
]);
?>
//_form_add_image.php
<?php DynamicFormWidget::begin([
'widgetContainer' => 'dynamicform_wrapper',
'widgetBody' => '.form-options-body',
'widgetItem' => '.form-options-item',
'min' => 1,
'insertButton' => '.add-item',
'deleteButton' => '.delete-item',
'model' => $modelsOptionValue[0],
'formId' => 'dynamic-form',
'formFields' => [
'upload_image'
],
]); ?>
<?= $form->field($modelOptionValue, "[{$index}]upload_image")->label(false)->widget(FileInput::classname(), [
'options' => [
'multiple' => false,
'accept' => 'image/*',
'class' => 'optionvalue-img'
],
'pluginOptions' => [
'previewFileType' => 'image',
'showCaption' => false,
'showUpload' => false,
'browseClass' => 'btn btn-default btn-sm',
'browseLabel' => ' Seleccionar Imagen',
'browseIcon' => '<i class="glyphicon glyphicon-picture"></i>',
'removeClass' => 'btn btn-danger btn-sm',
'removeLabel' => ' Borrar',
'removeIcon' => '<i class="fa fa-trash"></i>',
'previewSettings' => [
'image' => ['width' => '138px', 'height' => 'auto']
],
'initialPreview' => $initialPreview,
'layoutTemplates' => ['footer' => '']
]
]) ?>
和我的模特
public $upload_image;
/**
* @inheritdoc
*/
public static function tableName()
{
return 'option_value';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['upload_image'], 'file', 'extensions' => 'png, jpg', 'skipOnEmpty' => true],
[['id_montacarga', 'sort_order'], 'integer']
];
}
yii2日志截图。已更新
检查元素截图
谢谢!!!
在ActiveForm
中添加'enctype' => 'multipart/form-data'
。
<?php $form = ActiveForm::begin([
'options' => [
'enctype' => 'multipart/form-data',
'id' => 'dynamic-form'
]
]); ?>
如果您不需要 ajax 验证,请将 Ajax 验证设置为 false。