问题:无法将图像和文本保存到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]);
}
我在表单中尝试了多个简单字段,一切正常! 收集图像也很有效!
答案 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);
我就是这样做的,而且效果很好。希望这对您的项目也有帮助。