Yii2表单包含多个字段,包括文件上传

时间:2015-04-16 14:38:05

标签: yii2

问题:无法将图像和文本保存到DB中。 我有一个名为'image'的数据库表。它有'bird_id','name'和'filename'列。正在上传的文件名称将存储在“名称”中。我试图通过ActiveForm收集所有这些数据。 在模型文件(TestTable.php)中:

public function rules()
{
    return [
        [['name', 'about'], 'required'],
        [['name', 'about'], 'string', 'max' => 256],
    [['about'],'file','extensions'=>['jpg']]
    ];
}

在View文件(input.php)中:

<?php $form = ActiveForm::begin(['id'=>'input-form','options' => ['enctype' => 'multipart/form-data']]); ?>

    <?= $form->field($model, 'name') ?>
    <?= $form->field($model, 'about')->fileInput() ?>

    <div class="form-group">
        <?= Html::submitButton('Добавить', ['class' => 'btn btn-primary']) ?>
    </div>
<?php ActiveForm::end(); ?>

在控制器文件(TestTableController.php)中:

public function actionInput()
{
$model = new TestTable();
if(Yii::$app->request->isPost){
    $model->load(Yii::$app->request->post());
    $model->about = UploadedFile::getInstance($model,'about');
    if($model->save()){
        $model->about->saveAs('images/1.jpg');
    }
    return $this->redirect(['bird/index']);
}       
return $this->render('input',['model'=>$model]);
}

我在表单中尝试了多个简单字段,一切正常! 收集图像也很有效!

1 个答案:

答案 0 :(得分:1)

尝试将UploadedFile实例另存为非对象变量

$image = UploadedFile::getInstance($model, 'about');

然后你可以在模型对象中保存文件名(我在项目中使用随机字符串,但你可以随意更改)

$ext = end(explode('.', $image->name));
$model->about = Yii::$app->security->generateRandomString().".{$ext}";

现在您可以将模型保存在数据库中:

if($model->save()) {
    $image->saveAs('path/to/img/folder/'.$model->about);

我就是这样做的,而且效果很好。希望这对您的项目也有帮助。