yii2怎样实现表单上传数据和文件?
Admin 2021-05-10 群英技术资讯 1826 次浏览
如何实现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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章给大家分享Laravel修改日志的几个操作,下文会介绍Laravel实现修改日志位置和日志文件名的方法,实现方法和代码如下,需要的朋友可以参考,下面我们就一起来学习下吧。
php数组去重:1、arrray_unique函数用于数组去除重复项,如果两个以上的数组值相同,则只保留第一个值。2、php5.2.9版本增加了array_unique对多维组的支持,处理多维组需要设置sort_flags参数。
在PHP设计模式学习中,观察者模式是比较常见的模式之一,但是一些新手对于观察者模式不是很理解,因此下面就给大家详细介绍关于观察者模式,有这方面学习需要的朋友可以参考。
基于laravel的开源系统:1、October;2、PyroCMS;3、LavaLite;4、TypiCMS;5、Microweber;6、AsgardCMS;7、CoasterCMS;8、BorgertCMS;9、WebEdCMS等等。
下载phpExcelReader http://sourceforge.net/projects/phpexcelreader解压后得到下面这些文件jxlrwtest.xls这个excel文件有错误,自己重新建了个example.php和example2.php两个文件的输出不一样example.phpexample2.php另外,在运行example.php的时候可能报一些
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008