本文讲述了yii2高级应用之自定义组件实现全局使用图片上传功能的方法。分享给大家供大家参考,具体如下:
此例为yii2高组应用,这里只提供一个简单的事例
在yii2中,在使用到上传图片时有自带的一个上传图片类,但不太好用。
其中有一种方式,把自己写的一个上传图片类文件,注册成一个组件,在全局中使用。(我记得我在里面有写过一篇小物件的使用)
这里,我只作一个简单的自定义组件介绍
1、在backend(或frontend)定义一个 upload.php(注意路径: backend/components)
//图片上传处理类(这里略)//upload.php事例代码namespace backendcomponents;class Upload{public function test(){$a = "你好";return $a;}}2、backend/config/main.php 注册刚写的自定义组件
"components" => ["imgload" => ["class" => "backendcomponentsUpload"],]
3、控制器中如何使用
public function actionArticlelist(){$cc = Yii::$app->imgload->test();var_dump($cc);exit;}那么,一个完整的图片上传组件这里就不写了。
这里只写了一个使用自定义组件的方法!
还是补进进来吧。
1、自定义组件,便于全局使用。backend/config/main.php
"components" => ["user" => ["identityClass" => "commonmodelsAgMerch","enableAutoLogin" => true,],//自定义图片上传类"imgload" => ["class" => "agentcomponentsUpload"],]
2、自定义图片上传类 backend/components/Upload.php
namespace agentcomponents;use yii;use yiiaseObject;use yiiwebUploadedFile;class Upload extends Object{/** * [UploadPhoto description] * @param [type] $model [实例化模型] * @param [type] $path[图片存储路径] * @param [type] $originName [图片源名称] * @param boolean $isthumb[是否要缩略图] */public function UploadPhoto($model,$path,$originName,$isthumb=false){$root = $_SERVER["DOCUMENT_ROOT"]."/".$path;//返回一个实例化对象$files = UploadedFile::getInstance($model,$originName);$folder = date("Ymd")."/";$pre = rand(999,9999).time();if($files && ($files->type == "image/jpeg" || $files->type == "image/pjpeg" || $files->type == "image/png" || $files->type == "image/x-png" || $files->type == "image/gif")){$newName = $pre.".".$files->getExtension();}else{die($files->type);}if($files->size > 2000000){die("上传的文件太大");}if(!is_dir($root.$folder)){if(!mkdir($root.$folder, 0777, true)){die("创建目录失败...");}else{//chmod($root.$folder,0777);}}//echo $root.$folder.$newName;exit;if($files->saveAs($root.$folder.$newName)){if($isthumb){$this->thumbphoto($files,$path.$folder.$newName,$path.$folder."thumb".$newName);return $path.$folder.$newName."#".$path.$folder."thumb".$newName;}else{return $path.$folder.$newName;}}}}3、控制器部分
use backendcomponentsUpload;public function actionArtadd(){$model = new Article();if ($model->load(Yii::$app->request->post())) {//cover为表中的字段名$img = Yii::$app->imgload->UploadPhoto($model,"uploads/article/","cover");$model->cover = $img;//存入表中if($model->save()){Yii::$app->getSession()->setFlash("info", "添加成功!");return $this->redirect(["xxx"]);}else{Yii::$app->getSession()->setFlash("info", "添加失败!");@unlink($img);return $this->redirect(["xxx"]);}}//代码略}4、视图 (部分代码)
<?= $form->field($model, "cover", ["options"=>["class"=>""],"inputOptions" => ["class" => "form-control"],])->fileInput()->label(false); ?>
更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。