yii2.0上传

1.单文件上传

1)调用模型层完成:

M层调用:
use yii\web\UploadedFile;
[['a_pic'],'string','max'=>255],
//图片上传
public $a_pic;
public function upload(){
$this->a_pic->saveAs('uploads/' . $this->a_pic->baseName . '.' . $this->a_pic->extension);
return true;
}

C层调用:
use yii\web\UploadedFile;
$arr = $model->a_pic = UploadedFile::getInstance($model, 'a_pic');
if ($model->upload()) {
$photo = $arr->name;
$connection = \Yii::$app->db; 
$connection->createCommand()->insert('work1', [ 
'a_title' => $title, 
'a_desc' => $desc, 
'a_pic' => $photo,
])->execute(); 
}

2)不适用模型层进行文件上传

public $enableCsrfValidation = false; //禁止表单提交

$upload=new UploadedFile(); //实例化上传类
$name=$upload->getInstanceByName('myfile'); //获取文件原名称
$img=$_FILES['myfile']; //获取上传文件参数
$upload->tempName=$img['tmp_name']; //设置上传的文件的临时名称
$img_path='uploads/'.$name; //设置上传文件的路径名称(这里的数据进行入库)
$arr=$upload->saveAs($img_path); //保存文件
var_dump($arr);


<form action="index.php?r=exercise/upload" method="post" enctype="multipart/form-data">
标题:<input type="text" name="e_title"><br/>
头像:<input type="file" name="e_img"><br/>
<input type="submit" value="提交"></form>

2.多文件上传

1)调用模型层完成:

//模型层
public $e_img;

public function upload(){
foreach ($this->e_img as $file){

$file->saveAs('uploads/' . $file->baseName . '.' . $file->extension); 
}
return true; 
}
//控制器层
use yii\web\UploadedFile;
$model = new Exercise();
$arr = $model->e_img = UploadedFile::getInstances($model, 'e_img');
if ($model->upload()){
for($i=0;$i<count($arr);$i++){
$photo[] = $arr[$i]->name;
}
$str = implode(',',$photo);
$connection = \Yii::$app->db;
$connection->createCommand()->insert('exercise', [
'e_title' => "$e_title",
'e_img' => $str,
])->execute();
return $this->redirect(['exercise/list']);

$connection = \Yii::$app->db;
$command = $connection->createCommand('SELECT * FROM exercise');
$posts = $command->queryAll();
foreach($posts as $key => $val){
$img = explode(',',$val['e_img']);
$val['e_img'] = $img;
$photos[] = $val;
}
return $this->render('list',['list'=>$photos]);
//视图层
<?php foreach($list as $key=>$val){?>
<tr>
<td><?php echo $val['e_title']?></td>
<td>
<?php foreach($val['e_img'] as $k=>$v){?>
<img src="../web/uploads/<?php echo $v?>" style="width:100px;height:100px;"/>
<?php }?>
</td>
</tr>
<?php }?>

2)在调用模型层的基础上序列化

//控制器demo:

<?php

namespace frontend\controllers;
use app\models\Photo;
use Yii;
use yii\web\UploadedFile;
use yii\data\Pagination;
class PhotoController extends \yii\web\Controller{
public function actionIndex(){
$model = new Photo();
return $this->render('index', ['model' => $model]);
}
public function actionUpload(){
$model = new Photo();
if (Yii::$app->request->isPost) {
$arr = $model->photo = UploadedFile::getInstances($model, 'photo');
if ($model->upload()){
for ($i=0; $i <count($arr) ; $i++) { 
$img[]= $arr[$i]->name;
}else{
$str = serialize($img);
$model->photo = "$str";
$model->save(); 
}
}
return $this->render('index', ['model' => $model]);
}
public function actionList(){
$query = Photo::find();
$countQuery = clone $query;
$pages = new Pagination(['totalCount' => $countQuery->count(),'pageSize'=>2]);
$models = $query->offset($pages->offset)
->limit($pages->limit)
->all();
return $this->render('list', [
'models' => $models,
'pages' => $pages,
]);
}
}

//视图层demo:
<table>
<tr>
<td>id</td>
<td>ͼƬ</td>
</tr>
<?php foreach ($models as $key => $v) {?>
<tr>
<td><?php echo $v['p_id']?></td>
<?php 
$photos = unserialize($v['photo']);
foreach ($photos as $key => $va) {?>
<td><img src="../web/uploads/<?php echo $va?>" alt="" height="50" width="50"/></td>
<?php }?>

</tr>
<?php }?>

</table>
<?php 
use yii\widgets\LinkPager;
echo LinkPager::widget([
'pagination' => $pages,
]);?>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值