Yii2实现表单上传文件功能

小云云
发布: 2018-01-30 14:01:54
原创
2245人浏览过

本文主要介绍yii2使用表单上传文件的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。

1、单个文件上传

首先建立一个模型models/UploadForm.php,内容如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

namespace app\models;

 

use yii\base\Model;

use yii\web\UploadedFile;

 

/**

 * UploadForm is the model behind the upload form.

 */

class UploadForm extends Model

{

  /**

   * @var UploadedFile file attribute

   */

  public $file;

 

  /**

   * @return array the validation rules.

   */

  public function rules()

  {

    return [

      [['file'], 'file'],

    ];

  }

}

登录后复制

再建立一个视图文件,内容如下

1

2

3

4

5

6

7

8

9

10

11

<?php

use yii\widgets\ActiveForm;

?>

 

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

 

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

 

<button>Submit</button>

 

<?php ActiveForm::end() ?>

登录后复制

最后建立控制器文件,内容如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

namespace app\controllers;

 

use Yii;

use yii\web\Controller;

use app\models\UploadForm;

use yii\web\UploadedFile;

 

class SiteController extends Controller

{

  public function actionUpload()

  {

    $model = new UploadForm();

 

    if (Yii::$app->request->isPost) {

      $model->file = UploadedFile::getInstance($model, 'file');

 

      if ($model->file && $model->validate()) {       

        $model->file->saveAs('uploads/' . $model->file->baseName . '.' . $model->file->extension);

      }

    }

 

    return $this->render('upload', ['model' => $model]);

  }

}

登录后复制

注意这里我们没有用model->load(...),而是用了UploadedFile::getInstance(...)。区别是后者不会执行$model->validate(),所以需要手动的去执行$model->validate()来检验数据的合法性。如果检验通过了,上传的文件保存在uploads文件夹下,即web目录下的uploads里。

一些可选的配置选项

上传文件不能为空

1

2

3

4

5

6

public function rules()

{

  return [

    [['file'], 'file', 'skipOnEmpty' => false],

  ];

}

登录后复制

上传类型,不仅可以根据扩展名检验,还可以根据文件的内容进行检验

1

2

3

4

5

6

public function rules()

{

  return [

    [['file'], 'file', 'extensions' => 'jpg, png', 'mimeTypes' => 'image/jpeg, image/png',],

  ];

}

登录后复制

2、多文件上传

如果你想一次上传多个文件,只需调节几个参数就可以达到目的

Model:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

class UploadForm extends Model

{

  /**

   * @var UploadedFile|Null file attribute

   */

  public $file;

 

  /**

   * @return array the validation rules.

   */

  public function rules()

  {

    return [

      [['file'], 'file', 'maxFiles' => 10], // <--- here!

    ];

  }

}

登录后复制

View:

1

2

3

4

5

6

7

8

9

10

11

<?php

use yii\widgets\ActiveForm;

 

$form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]);

?>

 

<?= $form->field($model, 'file[]')->fileInput(['multiple' => true]) ?>

 

  <button>Submit</button>

 

<?php ActiveForm::end(); ?>

登录后复制

与单文件上传不同的是下面这句

1

$form->field($model, 'file[]')->fileInput(['multiple' => true])

登录后复制

Controller:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

namespace app\controllers;

 

use Yii;

use yii\web\Controller;

use app\models\UploadForm;

use yii\web\UploadedFile;

 

class SiteController extends Controller

{

  public function actionUpload()

  {

    $model = new UploadForm();

 

    if (Yii::$app->request->isPost) {

      $model->file = UploadedFile::getInstances($model, 'file');

 

      if ($model->file && $model->validate()) {

        foreach ($model->file as $file) {

          $file->saveAs('uploads/' . $file->baseName . '.' . $file->extension);

        }

      }

    }

 

    return $this->render('upload', ['model' => $model]);

  }

}

登录后复制

这样就可以实现多文件上传了。

相关推荐:

PHP和AjaxForm实现异步带进度条上传文件

jQuery ajaxupload插件实现无刷新上传文件详解

Ajax表单异步上传文件实例代码详解

以上就是Yii2实现表单上传文件功能的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号