91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用YII2框架怎么實現上傳單個文件

發布時間:2021-04-13 15:48:02 來源:億速云 閱讀:196 作者:Leah 欄目:開發技術

使用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框架怎么實現上傳單個文件

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武功县| 奎屯市| 渝北区| 塘沽区| 东兴市| 保山市| 阳东县| 嘉荫县| 元氏县| 永仁县| 天等县| 含山县| 鄂温| 博罗县| 通辽市| 黑水县| 安丘市| 泰安市| 比如县| 克拉玛依市| 抚顺市| 垦利县| 始兴县| 沙田区| 紫阳县| 嘉义县| 万全县| 曲沃县| 玉山县| 武城县| 平乡县| 岢岚县| 临泽县| 罗山县| 海伦市| 西青区| 临桂县| 商都县| 陇南市| 宜黄县| 丽江市|