我通过制作项目来学习Yii2。
我有两个模型:Company和CompanyFile。我在一个表单中使用它们来创建公司,上传相关文件并将它们保存在关联的表格中。
问题是公司正在创建但没有上传文件并在关联表中创建行。
以下是公司财务总监:
public function actionCreate()
{
$model = new Company();
$file = new CompanyFile();
if ($model->load(Yii::$app->request->post()) && $file->load(Yii::$app->request->post())) {
$model->save();
$attachments = UploadedFile::getInstances($file, 'attachment[]');
foreach($attachments as $a){
if ($a->upload()){
$file->company_id = $model->id;
$file->attachment = $a;
$file->save();
}
else {
return $this->render('create', [
'model' => $model,
'file' => $file,
]);
}
}
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('create', [
'model' => $model,
'file' => $file,
]);
}
}
这是CompanyFile模型的一部分:
public function upload()
{
if ($this->validate()){
$nameToSave = 'uploads/' . $this->attachment->baseName . '.' . $this->attachment->extension;
$this->attachment->saveAs($nameToSave);
return $nameToSave;
}
else {
return false;
}
}
这里是views / company / _form.php:
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>
<?= $form->field($model, 'name')->textarea(['rows' => 1, 'style' => 'width: 400px;']) ?>
<?= $form->field($file, 'attachment[]')->fileInput(['multiple' => true]) ?>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
提交表单后,我被重定向到新创建的公司页面。没有上传文件。可能有什么不对?我无法找到有关在Yii2中将多个文件保存到另一个表的正确方法的任何信息。
答案 0 :(得分:0)
需要
$attachments = UploadedFile::getInstances($file, 'attachment');
'附件'没有括号。