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