yii2怎样实现表单上传数据和文件?
Admin 2021-05-10 群英技术资讯 723 次浏览
如何实现yii2使用表单上传文件?这篇文章给大家介绍的是YII2框架实现表单中上传数据和文件一起的方法,小编认为是比较实用的,分享给大家参考一下,有这方面学习需求的朋友可以看一下。
有些时候我们提交的表单中含有文件。怎么样让表单里的数据和文件一起提交。我的数据表tb_user内容如下:
CREATE TABLE `tb_user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID', `name` varchar(32) DEFAULT '' COMMENT '用户名', `pwd` varchar(64) DEFAULT '' COMMENT '密码', `head_img` varchar(256) DEFAULT '' COMMENT '图像', `sex` tinyint(1) DEFAULT '0' COMMENT '性别(0:男,1:女)', `age` tinyint(3) DEFAULT '0' COMMENT '年龄', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
表单页面代码如下(至于为什么没有用ActiveForm来创建,这个就不解释了):
<?php use yii\helpers\Url; ?> <!doctype html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>表单提交</title> </head> <body> <form action="<?php echo Url::toRoute('index/index'); ?>" method="post" enctype="multipart/form-data"> 姓名:<input type="text" name="name"><br> 密码:<input type="password" name="pwd"><br> 性别:<input type="radio" name="sex" value="0" checked>男 <input type="radio" name="sex" value="1">女<br> 年龄:<input type="number" name="age"><br> 头像:<input type="file" name="head_img"><br> <input type="submit" value="提交"> <input name="_csrf" type="hidden" value="<?php echo \Yii::$app->request->csrfToken; ?>"> </form> </body> </html>
模型类代码如下:
<?php namespace app\models; use yii\db\ActiveRecord; use yii\web\UploadedFile; class MyUser extends ActiveRecord { //注意这里的上传路径是相对你入口文件 const UPLOAD_PAHT = 'uploads/'; //返回你要操作的数据表名 public static function tableName() { return '{{%user}}'; } //设置规则,验证表单数据 public function rules() { return [ ['name', 'required', 'message' => '请填写用户名'], ['pwd', 'string', 'length' => [6, 12], 'message' => '密码6-12位'], ['sex', 'in', 'range' => [0, 1], 'message' => '正确选择性别'], ['age', 'integer', 'min' => 1, 'max' => 120, 'message' => '正确填写年龄'], ['head_img', 'image', 'extensions' => ['png', 'jpg', 'gif'],
'maxSize' => 1024 * 1024 * 1024, 'message' => '请上传头像'], ]; } //上传头像 public function uploadHeadImg() { //'head_img'这个字符串必须跟你表单中file控件的name字段相同 $head_img = UploadedFile::getInstanceByName('head_img'); if (!empty($head_img)) { $filePath = self::UPLOAD_PAHT . date('Ymd') . '/'; //判断文件上传路径,如果不存在,则创建 if (!file_exists($filePath)) { @mkdir($filePath, 0777, true); @chmod($filePath, 0777); } //文件名,我们通过md5文件名加上扩展名 $fileName = md5($head_img->baseName) . '.' . $head_img->extension; $file = $filePath . $fileName; //保存文件到我们的服务器上 $head_img->saveAs($file); //返回服务器上的文件地址 return $file; } else { return false; } } }
控制器代码如下:
<?php namespace app\controllers; use YII; use yii\web\Controller; class IndexController extends Controller { public function actionIndex() { if (YII::$app->request->isPost) { $user = new \app\models\MyUser(); //把POST过来的数据加载到user对象 $data = YII::$app->request->post(); //注意第二个参数设为'',默认YII的ActiveForm创建的表单元素会加上下标 $user->load($data, ''); if ($user->validate()) { $user->pwd = YII::$app->security->generatePasswordHash($user->pwd); $user->head_img = $user->uploadHeadImg(); //这里保存时设为false不验证,因为pwd加密了 $user->save(false); } else { var_dump($user->errors); } } else { return $this->renderPartial('index'); } } }
这样我们就可以通过表单上传图像了。
以上就是yii2使用表单上传文件的用法介绍,上文分享了YII2框架表单提交与文件上传相关操作技巧,有需要的朋友可以了解一下,想要了解更多YII2框架的使用技巧大家可以继续关注其他文章。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
PHP中要怎么操作JSON?本篇文章带大家深入学习一下PHP中与JSON相关的函数,介绍一下使用这些函数需要注意的一些地方,希望对大家有所帮助!
本文实例讲述了Laravel5.1 框架文件管理操作。分享给大家供大家参考,具体如下:Laravel提供了一套很好用的文件系统 方便于管理文件夹和文件,支持Amazon S3和Rackspace云存储等驱动。
TP3.2框架本文实例讲述了TP3.2框架分页相关实现方法。分享给大家供大家参考,下文的讲解详细,步骤过程清晰,对大家进一步学习和理解相关知识有一定的帮助。
可以用来测试需要唯一凭据号码的,是否有重复值,不过一般直接使用uuid了,简单粗暴就解决问题,这个就简单的测试生成的数据是否有重复值吧 <?php/**@Author:wyy*@Date:2019-01-0913:34:16*@Email:2752154874@qq.com*@LastModifiedby:wyy*@LastModifi
这篇文章主要介绍了ThinkPHP5.0框架实现切换数据库的方法,结合实例形式分析了thinkPHP5.0数据库的配置与动态连接相关操作技巧,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008