关于php:Yii-使用自带UploadFile实现文件上传

3次阅读

共计 1401 个字符,预计需要花费 4 分钟才能阅读完成。

在 Yii 中咱们能够应用 Yii 自带的 yii\web\UploadedFile 类来实现文件上传

一:创立一个上传的模型类 (UploadForm)

<?php
namespace app\models;
use yii\base\Model;
/**
 * 上传模型类
 */
class UploadForm extends Model
{
    /**
     * @var UploadedFile
     */
    public $imageFile;
    
    // 上传验证
    public function rules()
    {
        return [[['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg, xlsx'],
        ];
    }
    /**
     * function: upload
     * author: wangjian
     * date: 2019/5/7 16:33
     * 文件上传
     */
    public function upload()
    {if ($this->validate()) {
            $dir = 'uploads/';
            $fileName = time();
            // 判断上传目录是否存在,不存在创立一个目录
            if (!is_dir($dir)) {mkdir($dir);
            }
            // 确定上传文件门路
            $filePath = $dir . $fileName . '.' . $this->imageFile->extension;
            // 上传文件
            $this->imageFile->saveAs($filePath);
            return $filePath;
        } else {
            // 上传失败
            return false;
        }
    }
}

如果应用 Yii 自带的 yii\web\UploadedFile 类来实现文件上传的话,上传文件的视图能够应用 yii\widgets\ActiveForm 部件来创立上传表单,例:

<?php
use yii\widgets\ActiveForm;
?>
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>
<?= $form->field($model, 'imageFile')->fileInput() ?>
    <button> 上传 </button>
<?php ActiveForm::end() ?>

如果你不想要应用 <?= $form->field($model, ‘imageFile’)->fileInput() ?> 来创立上传控件的话,你应用 input 来创立上传控件时,这时候 input 上传控件的 name 参数必须设置为:

// 上传模型类名 [上传文件名]
UploadForm[imageFile]

二:上传控制器:

// 获取上传信息
$model->imageFile = UploadedFile::getInstance($model, 'imageFile');
// 上传
$upload = $model->upload();
if ($upload) {// 文件上传胜利}else {// 文件上传失败}

这时候咱们就能够实现文件上传性能了

正文完
 0