【发布时间】:2021-09-12 08:07:00
【问题描述】:
我正在尝试学习如何在 Yii 中上传图像文件。我正在使用此代码
<?php
use yii\widgets\ActiveForm;
?>
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>
<?= $form->field($model, 'imageFile')->fileInput() ?>
<button>Submit</button>
<?php ActiveForm::end() ?>
在 ProjectFile/views/site/upload.php 文件中。 问题出在
<?= $form->field($model, 'imageFile')->fileInput() ?>
$model 给了我一个红色下划线。我看过很多例子,他们都写了这样的。 我需要做些什么来阻止这个问题?
编辑: 在controller/SiteController.php里面
// function for upload
public function actionUploadImage()
{
$model = new UploadImageForm();
if (Yii::$app->request->isPost) {
$model->imageFile = UploadedFile::getInstance($model, 'imageFile');
if ($model->upload()) {
// file is uploaded successfully
return;
}
}
return $this->render('upload', ['model' => $model]);
}
在models/UploadImageForm.php中
<?php
namespace app\models;
use yii\base\Model;
use yii\web\UploadedFile;
class UploadImageForm extends \yii\base\Model
{
public $imageFile;
// gives rules of how to upload picture
public function rules(){
return [
[['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg'],
];
}
// uploads picture
public function upload(){
if($this->validate()){
$this->imageFile->saveAs('uploads/' . $this->imageFile->baseName . '.' . $this->imageFile->extension);
}
}
}
【问题讨论】:
-
您是否按照documentation中的指南进行操作?
-
红色下划线 - 你的意思是文件输入字段有红色边框,并且在字段下方/上方/附近出现一些错误消息?如果这是你的情况,那么你有验证问题。请提供您的模型的规则方法代码(在表单中使用)
-
@DefinitelynotRafal 是的,我查看了您分享的文档。
-
@neolodor 我需要使用哪种类型的验证?
-
@gun 取决于您要实现的文件存储逻辑:如果您只想在服务器上的某个目录中上传文件,请按照yii2 docs 从更新中看到您已经完成。但是: 1. 模型方法
upload必须返回一些结果。在您的情况下,它什么也不返回。 2. 尝试上传文件无效后查看错误日志 - 可能是您有一些文件权限问题。
标签: php image file-upload yii