# imooc_shop **Repository Path**: webjust/imooc_shop ## Basic Information - **Project Name**: imooc_shop - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-11-12 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # README ## 控制器 E:\迅雷下载\imooc_shop\48_optimize\basic\controllers\SiteController.php ``` [ 'class' => AccessControl::className(), 'only' => ['logout'], 'rules' => [ [ 'actions' => ['logout'], 'allow' => true, 'roles' => ['@'], ], ], ], 'verbs' => [ 'class' => VerbFilter::className(), 'actions' => [ 'logout' => ['post'], ], ], ]; } public function actions() { return [ 'error' => [ 'class' => 'yii\web\ErrorAction', ], 'captcha' => [ 'class' => 'yii\captcha\CaptchaAction', 'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null, ], ]; } public function actionIndex() { return $this->render('index'); } public function actionLogin() { if (!\Yii::$app->user->isGuest) { return $this->goHome(); } $model = new LoginForm(); if ($model->load(Yii::$app->request->post()) && $model->login()) { return $this->goBack(); } return $this->render('login', [ 'model' => $model, ]); } public function actionLogout() { Yii::$app->user->logout(); return $this->goHome(); } public function actionContact() { $model = new ContactForm(); if ($model->load(Yii::$app->request->post()) && $model->contact(Yii::$app->params['adminEmail'])) { Yii::$app->session->setFlash('contactFormSubmitted'); return $this->refresh(); } return $this->render('contact', [ 'model' => $model, ]); } public function actionAbout() { return $this->render('about'); } } ``` E:\迅雷下载\imooc_shop\48_optimize\basic\controllers\IndexController.php ``` layout = "layout1"; return $this->render("index"); } } ``` E:\迅雷下载\imooc_shop\48_optimize\basic\controllers\CommonController.php ``` view->params['menu'] = $menu; $data = []; $data['products'] = []; $total = 0; if (Yii::$app->session['isLogin']) { $userid = User::find()->where('username = :name', [":name" => Yii::$app->session['loginname']])->one()->userid; if (!empty($userid)) { $carts = Cart::find()->where('userid = :uid', [':uid' => $userid])->asArray()->all(); foreach($carts as $k=>$pro) { $product = Product::find()->where('productid = :pid', [':pid' => $pro['productid']])->one(); $data['products'][$k]['cover'] = $product->cover; $data['products'][$k]['title'] = $product->title; $data['products'][$k]['productnum'] = $pro['productnum']; $data['products'][$k]['price'] = $pro['price']; $data['products'][$k]['productid'] = $pro['productid']; $data['products'][$k]['cartid'] = $pro['cartid']; $total += $data['products'][$k]['price'] * $data['products'][$k]['productnum']; } } } $data['total'] = $total; $this->view->params['cart'] = $data; } } ``` E:\迅雷下载\imooc_shop\48_optimize\basic\controllers\ProductController.php ``` layout = "layout2"; $cid = Yii::$app->request->get("cateid"); $where = "cateid = :cid and ison = '1'"; $params = [':cid' => $cid]; $model = Product::find()->where($where, $params); $all = $model->asArray()->all(); $count = $model->count(); $pageSize = Yii::$app->params['pageSize']['frontproduct']; $pager = new Pagination(['totalCount' => $count, 'pageSize' => $pageSize]); $all = $model->offset($pager->offset)->limit($pager->limit)->asArray()->all(); $tui = $model->Where($where . ' and istui = \'1\'', $params)->orderby('createtime desc')->limit(5)->asArray()->all(); $hot = $model->Where($where . ' and ishot = \'1\'', $params)->orderby('createtime desc')->limit(5)->asArray()->all(); $sale = $model->Where($where . ' and issale = \'1\'', $params)->orderby('createtime desc')->limit(5)->asArray()->all(); return $this->render("index", ['sale' => $sale, 'tui' => $tui, 'hot' => $hot, 'all' => $all, 'pager' => $pager, 'count' => $count]); } public function actionDetail() { $this->layout = "layout2"; $productid = Yii::$app->request->get("productid"); $product = Product::find()->where('productid = :id', [':id' => $productid])->asArray()->one(); return $this->render("detail", ['product' => $product]); } } ``` E:\迅雷下载\imooc_shop\48_optimize\basic\controllers\MemberController.php ``` layout = 'layout2'; $model = new User; if (Yii::$app->request->isPost) { $post = Yii::$app->request->post(); if ($model->login($post)) { return $this->goBack(Yii::$app->request->referrer); } } return $this->render("auth", ['model' => $model]); } public function actionLogout() { Yii::$app->session->remove('loginname'); Yii::$app->session->remove('isLogin'); if (!isset(Yii::$app->session['isLogin'])) { return $this->goBack(Yii::$app->request->referrer); } } public function actionReg() { $model = new User; if (Yii::$app->request->isPost) { $post = Yii::$app->request->post(); if ($model->regByMail($post)) { Yii::$app->session->setFlash('info', '电子邮件发送成功'); } } $this->layout = 'layout2'; return $this->render('auth', ['model' => $model]); } public function actionQqlogin() { require_once("../vendor/qqlogin/qqConnectAPI.php"); $qc = new \QC(); $qc->qq_login(); } public function actionQqcallback() { require_once("../vendor/qqlogin/qqConnectAPI.php"); $auth = new \OAuth(); $accessToken = $auth->qq_callback(); $openid = $auth->get_openid(); $qc = new \QC($accessToken, $openid); $userinfo = $qc->get_user_info(); $session = Yii::$app->session; $session['userinfo'] = $userinfo; $session['openid'] = $openid; if (User::find()->where('openid = :openid', [':openid' => $openid])->one()) { $session['loginname'] = $userinfo['nickname']; $session['isLogin'] = 1; return $this->redirect(['index/index']); } return $this->redirect(['member/qqreg']); } public function actionQqreg() { $this->layout = "layout2"; $model = new User; if (Yii::$app->request->isPost) { $post = Yii::$app->request->post(); $session = Yii::$app->session; $post['User']['openid'] = $session['openid']; if ($model->reg($post, 'qqreg')) { $session['loginname'] = $session['userinfo']['nickname']; $session['isLogin'] = 1; return $this->redirect(['index/index']); } } return $this->render('qqreg', ['model' => $model]); } } ``` E:\迅雷下载\imooc_shop\48_optimize\basic\controllers\AddressController.php ``` session['isLogin'] != 1) { return $this->redirect(['member/auth']); } $loginname = Yii::$app->session['loginname']; $userid = User::find()->where('username = :name or useremail = :email', [':name' => $loginname, ':email' => $loginname])->one()->userid; if (Yii::$app->request->isPost) { $post = Yii::$app->request->post(); $post['userid'] = $userid; $post['address'] = $post['address1'].$post['address2']; $data['Address'] = $post; $model = new Address; $model->load($data); $model->save(); } return $this->redirect($_SERVER['HTTP_REFERER']); } public function actionDel() { if (Yii::$app->session['isLogin'] != 1) { return $this->redirect(['member/auth']); } $loginname = Yii::$app->session['loginname']; $userid = User::find()->where('username = :name or useremail = :email', [':name' => $loginname, ':email' => $loginname])->one()->userid; $addressid = Yii::$app->request->get('addressid'); if (!Address::find()->where('userid = :uid and addressid = :aid', [':uid' => $userid, ':aid' => $addressid])->one()) { return $this->redirect($_SERVER['HTTP_REFERER']); } Address::deleteAll('addressid = :aid', [':aid' => $addressid]); return $this->redirect($_SERVER['HTTP_REFERER']); } } ``` E:\迅雷下载\imooc_shop\48_optimize\basic\controllers\CartController.php ``` session['isLogin'] != 1) { return $this->redirect(['member/auth']); } $userid = User::find()->where('username = :name', [':name' => Yii::$app->session['loginname']])->one()->userid; $cart = Cart::find()->where('userid = :uid', [':uid' => $userid])->asArray()->all(); $data = []; foreach ($cart as $k=>$pro) { $product = Product::find()->where('productid = :pid', [':pid' => $pro['productid']])->one(); $data[$k]['cover'] = $product->cover; $data[$k]['title'] = $product->title; $data[$k]['productnum'] = $pro['productnum']; $data[$k]['price'] = $pro['price']; $data[$k]['productid'] = $pro['productid']; $data[$k]['cartid'] = $pro['cartid']; } $this->layout = 'layout1'; return $this->render("index", ['data' => $data]); } public function actionAdd() { if (Yii::$app->session['isLogin'] != 1) { return $this->redirect(['member/auth']); } $userid = User::find()->where('username = :name', [':name' => Yii::$app->session['loginname']])->one()->userid; if (Yii::$app->request->isPost) { $post = Yii::$app->request->post(); $num = Yii::$app->request->post()['productnum']; $data['Cart'] = $post; $data['Cart']['userid'] = $userid; } if (Yii::$app->request->isGet) { $productid = Yii::$app->request->get("productid"); $model = Product::find()->where('productid = :pid', [':pid' => $productid])->one(); $price = $model->issale ? $model->saleprice : $model->price; $num = 1; $data['Cart'] = ['productid' => $productid, 'productnum' => $num, 'price' => $price, 'userid' => $userid]; } if (!$model = Cart::find()->where('productid = :pid and userid = :uid', [':pid' => $data['Cart']['productid'], ':uid' => $data['Cart']['userid']])->one()) { $model = new Cart; } else { $data['Cart']['productnum'] = $model->productnum + $num; } $data['Cart']['createtime'] = time(); $model->load($data); $model->save(); return $this->redirect(['cart/index']); } public function actionMod() { $cartid = Yii::$app->request->get("cartid"); $productnum = Yii::$app->request->get("productnum"); Cart::updateAll(['productnum' => $productnum], 'cartid = :cid', [':cid' => $cartid]); } public function actionDel() { $cartid = Yii::$app->request->get("cartid"); Cart::deleteAll('cartid = :cid', [':cid' => $cartid]); return $this->redirect(['cart/index']); } } ``` E:\迅雷下载\imooc_shop\48_optimize\basic\controllers\OrderController.php ``` layout = "layout2"; if (Yii::$app->session['isLogin'] != 1) { return $this->redirect(['member/auth']); } $loginname = Yii::$app->session['loginname']; $userid = User::find()->where('username = :name or useremail = :email', [':name' => $loginname, ':email' => $loginname])->one()->userid; $orders = Order::getProducts($userid); return $this->render("index", ['orders' => $orders]); } public function actionCheck() { if (Yii::$app->session['isLogin'] != 1) { return $this->redirect(['member/auth']); } $orderid = Yii::$app->request->get('orderid'); $status = Order::find()->where('orderid = :oid', [':oid' => $orderid])->one()->status; if ($status != Order::CREATEORDER && $status != Order::CHECKORDER) { return $this->redirect(['order/index']); } $loginname = Yii::$app->session['loginname']; $userid = User::find()->where('username = :name or useremail = :email', [':name' => $loginname, ':email' => $loginname])->one()->userid; $addresses = Address::find()->where('userid = :uid', [':uid' => $userid])->asArray()->all(); $details = OrderDetail::find()->where('orderid = :oid', [':oid' => $orderid])->asArray()->all(); $data = []; foreach($details as $detail) { $model = Product::find()->where('productid = :pid' , [':pid' => $detail['productid']])->one(); $detail['title'] = $model->title; $detail['cover'] = $model->cover; $data[] = $detail; } $express = Yii::$app->params['express']; $expressPrice = Yii::$app->params['expressPrice']; $this->layout = "layout1"; return $this->render("check", ['express' => $express, 'expressPrice' => $expressPrice, 'addresses' => $addresses, 'products' => $data]); } public function actionAdd() { if (Yii::$app->session['isLogin'] != 1) { return $this->redirect(['member/auth']); } $transaction = Yii::$app->db->beginTransaction(); try { if (Yii::$app->request->isPost) { $post = Yii::$app->request->post(); $ordermodel = new Order; $ordermodel->scenario = 'add'; $usermodel = User::find()->where('username = :name or useremail = :email', [':name' => Yii::$app->session['loginname'], ':email' => Yii::$app->session['loginname']])->one(); if (!$usermodel) { throw new \Exception(); } $userid = $usermodel->userid; $ordermodel->userid = $userid; $ordermodel->status = Order::CREATEORDER; $ordermodel->createtime = time(); if (!$ordermodel->save()) { throw new \Exception(); } $orderid = $ordermodel->getPrimaryKey(); foreach ($post['OrderDetail'] as $product) { $model = new OrderDetail; $product['orderid'] = $orderid; $product['createtime'] = time(); $data['OrderDetail'] = $product; if (!$model->add($data)) { throw new \Exception(); } Cart::deleteAll('productid = :pid' , [':pid' => $product['productid']]); Product::updateAllCounters(['num' => -$product['productnum']], 'productid = :pid', [':pid' => $product['productid']]); } } $transaction->commit(); }catch(\Exception $e) { $transaction->rollback(); return $this->redirect(['cart/index']); } return $this->redirect(['order/check', 'orderid' => $orderid]); } public function actionConfirm() { //addressid, expressid, status, amount(orderid,userid) try { if (Yii::$app->session['isLogin'] != 1) { return $this->redirect(['member/auth']); } if (!Yii::$app->request->isPost) { throw new \Exception(); } $post = Yii::$app->request->post(); $loginname = Yii::$app->session['loginname']; $usermodel = User::find()->where('username = :name or useremail = :email', [':name' => $loginname, ':email' => $loginname])->one(); if (empty($usermodel)) { throw new \Exception(); } $userid = $usermodel->userid; $model = Order::find()->where('orderid = :oid and userid = :uid', [':oid' => $post['orderid'], ':uid' => $userid])->one(); if (empty($model)) { throw new \Exception(); } $model->scenario = "update"; $post['status'] = Order::CHECKORDER; $details = OrderDetail::find()->where('orderid = :oid', [':oid' => $post['orderid']])->all(); $amount = 0; foreach($details as $detail) { $amount += $detail->productnum*$detail->price; } if ($amount <= 0) { throw new \Exception(); } $express = Yii::$app->params['expressPrice'][$post['expressid']]; if ($express < 0) { throw new \Exception(); } $amount += $express; $post['amount'] = $amount; $data['Order'] = $post; if ($model->load($data) && $model->save()) { return $this->redirect(['order/pay', 'orderid' => $post['orderid'], 'paymethod' => $post['paymethod']]); } }catch(\Exception $e) { return $this->redirect(['index/index']); } } public function actionPay() { try{ if (Yii::$app->session['isLogin'] != 1) { throw new \Exception(); } $orderid = Yii::$app->request->get('orderid'); $paymethod = Yii::$app->request->get('paymethod'); if (empty($orderid) || empty($paymethod)) { throw new \Exception(); } if ($paymethod == 'alipay') { return Pay::alipay($orderid); } }catch(\Exception $e) {} return $this->redirect(['order/index']); } public function actionGetexpress() { $expressno = Yii::$app->request->get('expressno'); $res = Express::search($expressno); echo $res; exit; } public function actionReceived() { $orderid = Yii::$app->request->get('orderid'); $order = Order::find()->where('orderid = :oid', [':oid' => $orderid])->one(); if (!empty($order) && $order->status == Order::SENDED) { $order->status = Order::RECEIVED; $order->save(); } return $this->redirect(['order/index']); } } ``` E:\迅雷下载\imooc_shop\48_optimize\basic\controllers\PayController.php request->isPost) { $post = Yii::$app->request->post(); if (Pay::notify($post)) { echo "success"; exit; } echo "fail"; exit; } } public function actionReturn() { $this->layout = 'layout1'; $status = Yii::$app->request->get('trade_status'); if ($status == 'TRADE_SUCCESS') { $s = 'ok'; } else { $s = 'no'; } return $this->render("status", ['status' => $s]); } } ## 视图 ## 模型