Yii2 上传图片

来源:互联网 发布:淘宝火拼单咋下 编辑:程序博客网 时间:2024/04/29 05:39

刚学习yii2有点头大,这个图片多图功能后续另外再测试下.目前单图上传无压力..

1- 首先先搭个简单的数据库

product | CREATE TABLE `product` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',  `title` varchar(255) NOT NULL,  `bigpic` varchar(255) NOT NULL,  `smallpics` varchar(255) NOT NULL,  `desc` text NOT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 

2- 搭建完毕数据,可以用Gii生成下model和CURD,这个不累赘说明

3- 在controller里开始写逻辑,涉及上传可以考虑内置的UploadedFile.用这个吧

use yii\web\UploadedFile;    public function actionCreate()    {        $model = new Product();        $uploadSuccessPath = "";        if ($model->load(Yii::$app->request->post()) ) {            $model->bigpic = UploadedFile::getInstance($model,'bigpic');            $dir = './uploads/'.date("Ymd");            if(!is_dir($dir)){                mkdir($dir,0777,true);            }            if($model->validate()){                $filename = date("YmdHms").$model->bigpic->baseName . "." . $model->bigpic->extension;                $dir = $dir."/". $filename;                $model->bigpic->saveAs($dir);            }            $model->save();            return $this->redirect(['view', 'id' => $model->id]);        } else {            return $this->render('create', [                'model' => $model,            ]);        }    }

为了省麻烦,我在Create里面直接做,视图因为引用的是_form.php模板, 所以里面去修改

用composer安装下组件,然后操作

$ php composer.phar require kartik-v/yii2-widget-fileinput "@dev"

进一步编辑视图,这个参考这个Github项目

use yii\helpers\Html;use yii\widgets\ActiveForm;use kartik\file\FileInput;<div class="product-form">    <?php $form = ActiveForm::begin(['options'=>['enctype'=>'multipart/form-data']]); ?>    <?= $form->field($model, 'title')->textInput(['maxlength' => true]) ?>    <?php        echo $form->field($model, 'bigpic')->label('多图上传')->widget(FileInput::classname(), [            'options' => ['multiple' => true],            'pluginOptions' => [                    'showUpload' => false,                    'browseLabel' => '',                    'removeLabel' => '',                    'mainClass' => 'input-group-lg'                ]            ]);     ?>    <?php  echo $form->field($model, 'smallpics')->textInput(['maxlength' => true]) ?>    <?= $form->field($model, 'desc')->textarea(['rows' => 6]) ?>    <div class="form-group">        <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>    </div>    <?php ActiveForm::end(); ?>
原创粉丝点击