yii 上传图片

针对于YII2.0官方手册来说,我稍微修改了一些内容具体的就是把model层里定义的uoload方法在controller方法里合并了

创建模型

namespace app\models;

use yii\base\Model;

use yii\web\UploadedFile;

class UploadForm extends Model{

 public $imageFile;//定义一个公用的名称

  public function rules() {

    return [ [['imageFile'], 'file', 'skipOnEmpty' => false,
'extensions' => 'png, jpg'], ];//extensions
这边报错的话就把这个设置关闭(删除后缀代码就好了)

  }

 

}

 

渲染文件输入

 

接下来,在视图里创建一个文件输入控件

<?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() ?>

视图和模型的连接

现在,在控制器方法里编写连接模型和视图的代码以实现文件上传。

namespace app\controllers;
use Yii;
use yii\web\Controller;
use app\models\UploadForm;
use yii\web\UploadedFile;//需要自己手动创建uploads文件夹  创建在web访问目录下就ok了
class SiteController extends Controller{
    public function actionUpload()
    {
        $model = new UploadForm();

        if (Yii::$app->request->isPost) {
            $model->imageFile = UploadedFile::getInstance($model, 'imageFile');
            if ($model->upload()$model->validata()) {//这点就是改变的所在
$model->file->saveAs('uploads/'.$model->file->baseName.'.'.$model->file->extension);
                // 文件上传成功
                return;
            }
        }

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

恭喜你已经学会YII2.0中的上传了

扩展::《多文件上传》

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

Model:

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:

<?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(); ?>

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

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

Controller:

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]);
    }
}
时间: 2024-09-13 16:03:51

yii 上传图片的相关文章

Yii框架上传图片用法总结_php实例

本文实例讲述了Yii框架上传图片用法.分享给大家供大家参考,具体如下: Yii 提供了 CUploadedFile 来上传文件,比如图片,或者文档. 官方关于这个类的介绍 : CUploadedFile represents the information for an uploaded file. Call getInstance to retrieve the instance of an uploaded file, and then use saveAs to save it on th

PHP开发框架Yii Framework教程(47) 主题 Theme 示例

Theming是一个在Web应用程序里定制网页外观的系统方式.通过采用一个新的主题,可以非常方便的改变应用的外观. 在Yii,每个主题由一个目录代表,包含view文件,layout文件和相关的资源文件,如图片, CSS文件, JavaScript文 件等.主题的名字就是他的目录名字.全部主题都放在在同一目录WebRoot/themes下 .在任何时候,只有一个主题可以被激活 . 提示:默认的主题根目录WebRoot/themes可被配置成其他的.只需要配置themeManager应用部件的属性b

PHP开发框架Yii Framework教程(15) UI 组件 MultiFileUpload示例

CMultiFileUpload 用于上传文件,支持一次同时上传多个文件.这个UI组件是基于jQuery Multi File Upload 插件.Yii 内置的很多UI组件都是基于JQuery,因此需要创建assets 目录用于存放动态生成的javascripts 等. 所上传的文件的信 息可以通过$_FILES[widget-name]来访问,比如,CMultiFileUpload的name为"files" 所上传的文件信息可以通过$_FILES ['files']来访问.此外包含

yii使用activeFileField控件实现上传文件与图片的方法_php实例

本文实例讲述了yii使用activeFileField控件实现上传文件与图片的方法.分享给大家供大家参考,具体如下: yii框架提供了activeFileField控件来完成上传文件(当然也包括了上传图片)的操作,下面介绍yii的activeFileField使用方法. 1.函数原型: 复制代码 代码如下: public static string activeFileField(CModel $model, string $attribute, array $htmlOptions=array

yii实现使用CUploadedFile上传文件的方法_php实例

本文实例讲述了yii实现使用CUploadedFile上传文件的方法.分享给大家供大家参考,具体如下: 一.前端代码 Html代码: <form action="<?php echo $this->createUrl('/upload/default/upload/');?>" method="post" enctype="multipart/form-data"> <input type="file

Yii+upload实现AJAX上传图片的方法_php实例

本文实例讲述了Yii+upload实现AJAX上传图片的方法.分享给大家供大家参考,具体如下: 控制器代码: /** * get ajax uploaded files. */ public function actionGetAjax(){ $model=new Attachment();//加载附件模型 $tmpFile = CUploadedFile::getInstanceByName('image');//读取图像上传域,并使用系统上传组件上传 $Directroy = Yii::ap

Yii+upload实现AJAX上传图片的方法

本文实例讲述了Yii+upload实现AJAX上传图片的方法.分享给大家供大家参考,具体如下: 控制器代码: /** * get ajax uploaded files. */ public function actionGetAjax(){ $model=new Attachment();//加载附件模型 $tmpFile = CUploadedFile::getInstanceByName('image');//读取图像上传域,并使用系统上传组件上传 $Directroy = Yii::ap

yii上传文件或图片实例

 最近在看yii,yii有自带上传图片的方法.简单的贴代码.分为两块,第一块view:test.php.第二块是controller:TestController.php 1.test.php 代码如下: <body> <form action="<?php echo $this->createUrl('/test/upload/');?>" method="post" enctype="multipart/form-d

Yii2实现ajax上传图片插件用法_php实例

本文实例讲述了Yii2实现ajax上传图片插件用法.分享给大家供大家参考,具体如下: 这里需要先下载 mdmsoft/yii2-upload-file.插件. 代码如下: public function actionCreate() { $model = new DynamicModel([ 'nama', 'file_id' ]); // behavior untuk upload file $model->attachBehavior('upload', [ 'class' => 'mdm