YII2框架實(shí)現(xiàn)表單中上傳單個(gè)文件的方法示例
本文實(shí)例講述了YII2框架實(shí)現(xiàn)表單中上傳單個(gè)文件的方法。分享給大家供大家參考,具體如下:
有些時(shí)候我們提交的表單中含有文件。怎么樣讓表單里的數(shù)據(jù)和文件一起提交。
我的數(shù)據(jù)表tb_user內(nèi)容如下:
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='用戶表';
表單頁(yè)面代碼如下(至于為什么沒(méi)有用ActiveForm來(lái)創(chuàng)建,這個(gè)就不解釋了):
<?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 { //注意這里的上傳路徑是相對(duì)你入口文件 const UPLOAD_PAHT = 'uploads/'; //返回你要操作的數(shù)據(jù)表名 public static function tableName() { return '{{%user}}'; } //設(shè)置規(guī)則,驗(yàn)證表單數(shù)據(jù) public function rules() { return [ ['name', 'required', 'message' => '請(qǐng)?zhí)顚懹脩裘?], ['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' => '請(qǐng)上傳頭像'], ]; } //上傳頭像 public function uploadHeadImg() { //'head_img'這個(gè)字符串必須跟你表單中file控件的name字段相同 $head_img = UploadedFile::getInstanceByName('head_img'); if (!empty($head_img)) { $filePath = self::UPLOAD_PAHT . date('Ymd') . '/'; //判斷文件上傳路徑,如果不存在,則創(chuàng)建 if (!file_exists($filePath)) { @mkdir($filePath, 0777, true); @chmod($filePath, 0777); } //文件名,我們通過(guò)md5文件名加上擴(kuò)展名 $fileName = md5($head_img->baseName) . '.' . $head_img->extension; $file = $filePath . $fileName; //保存文件到我們的服務(wù)器上 $head_img->saveAs($file); //返回服務(wù)器上的文件地址 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過(guò)來(lái)的數(shù)據(jù)加載到user對(duì)象 $data = YII::$app->request->post(); //注意第二個(gè)參數(shù)設(shè)為'',默認(rèn)YII的ActiveForm創(chuàng)建的表單元素會(huì)加上下標(biāo) $user->load($data, ''); if ($user->validate()) { $user->pwd = YII::$app->security->generatePasswordHash($user->pwd); $user->head_img = $user->uploadHeadImg(); //這里保存時(shí)設(shè)為false不驗(yàn)證,因?yàn)閜wd加密了 $user->save(false); } else { var_dump($user->errors); } } else { return $this->renderPartial('index'); } } }
這樣我們就可以通過(guò)表單上傳圖像了。
更多關(guān)于Yii相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Yii框架入門及常用技巧總結(jié)》、《php優(yōu)秀開發(fā)框架總結(jié)》、《smarty模板入門基礎(chǔ)教程》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家基于Yii框架的PHP程序設(shè)計(jì)有所幫助。
- yii2.0框架使用 beforeAction 防非法登陸的方法分析
- Yii2使用$this->context獲取當(dāng)前的Module、Controller(控制器)、Action等
- Yii框架獲取當(dāng)前controlle和action對(duì)應(yīng)id的方法
- yii框架配置默認(rèn)controller和action示例
- YII2框架中驗(yàn)證碼的簡(jiǎn)單使用方法示例
- YII2框架中分頁(yè)組件的使用方法示例
- YII2框架中自定義用戶認(rèn)證模型,完成登陸和注冊(cè)操作示例
- YII2框架中操作數(shù)據(jù)庫(kù)的方式實(shí)例分析
- YII2框架自定義全局函數(shù)的實(shí)現(xiàn)方法小結(jié)
- yii2.0框架場(chǎng)景的簡(jiǎn)單使用示例
- YII2框架中actions的作用與使用方法示例
相關(guān)文章
Thinkphp 框架擴(kuò)展之類庫(kù)擴(kuò)展操作詳解
這篇文章主要介紹了Thinkphp 框架擴(kuò)展之類庫(kù)擴(kuò)展操作,結(jié)合實(shí)例形式分析了Thinkphp 類庫(kù)擴(kuò)展的相關(guān)原理、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下2020-04-04PHP獲取短鏈接跳轉(zhuǎn)后的真實(shí)地址和響應(yīng)頭信息的方法
這篇文章主要介紹了PHP獲取短鏈接跳轉(zhuǎn)后的真實(shí)地址和響應(yīng)頭信息的方法,本文使用get_headers函數(shù)實(shí)現(xiàn),需要的朋友可以參考下2014-07-07PHP常用技術(shù)文之文件操作和目錄操作總結(jié)
這篇文章主要介紹了PHP常用技術(shù)文之文件操作和目錄操作總結(jié),本文講解了基本文件的操作、目錄的操作等內(nèi)容,需要的朋友可以參考下2014-09-09初識(shí)通用數(shù)據(jù)庫(kù)操作類——前端easyui-datagrid,form(php)
這篇文章主要介紹了初識(shí)通用數(shù)據(jù)庫(kù)操作類——前端easyui-datagrid,form(php),實(shí)現(xiàn)代碼比較簡(jiǎn)單,有需要的小伙伴歡迎來(lái)參考2015-07-07Linux中用PHP判斷程序運(yùn)行狀態(tài)的2個(gè)方法
這篇文章主要介紹了Linux中用PHP判斷程序運(yùn)行狀態(tài)的2個(gè)方法,需要的朋友可以參考下2014-05-05