'Think', 'view_path' => '', 'view_suffix' => 'html', 'strip_space' => true, 'view_depr' => DS, 'tpl_begin' => '{', 'tpl_end' => '}', 'taglib_begin' => '{', 'taglib_end' => '}', ]; /** * 架构函数 * @param Request $request Request对象 * @access public */ public function __construct(Request $request = null) { WSTConf('CONF.seoMallSwitch'); if(WSTConf('CONF.seoMallSwitch')==0){ $this->redirect('home/switchs/index'); exit; } // 生成request对象 $this->request = is_null($request) ? Request::instance() : $request; // 初始化配置信息 $this->config = Config::get('template') ?: $this->config; // 处理路由参数 $route = $this->request->param('route', ''); $param = explode('-', $route); // 是否自动转换控制器和操作名 $convert = \think\Config::get('url_convert'); if('wechat/weixinpays/toaddonpay' != $this->request->path()){ // 格式化路由的插件位置 $this->action = $convert ? strtolower(array_pop($param)) : array_pop($param); $this->controller = $convert ? strtolower(array_pop($param)) : array_pop($param); $this->addon = $convert ? strtolower(array_pop($param)) : array_pop($param); $base = new \think\addons\BaseModel(); $status = $base->getAddonStatus(ucfirst($this->addon)); if(isset($status) && $status!=1){ $request = request(); $module = WSTVisitModule(); header("Location:".url($module.'/error/message')); exit(); } } // 生成view_path $view_path = $this->config['view_path'] ?: 'view'; // 重置配置 Config::set('template.view_path', ADDON_PATH . $this->addon . DS . $view_path . DS); $this->checkPrivileges(); parent::__construct($request); $this->assign("v",WSTConf('CONF.wstVersion')."_".WSTConf('CONF.wsthomeStyleId')); $this->initLayout(); } /** * 定义模板 */ public function initLayout(){ $wsthomeStyle = WSTConf('CONF.wsthomeStyle')?WSTConf('CONF.wsthomeStyle'):'default'; $wstmobileStyle = WSTConf('CONF.wstmobileStyle')?WSTConf('CONF.wstmobileStyle'):'default'; $wstwechatStyle = WSTConf('CONF.wstwechatStyle')?WSTConf('CONF.wstwechatStyle'):'default'; $this->assign('LAYOUT_HOME_BASE','home@'.$wsthomeStyle.'/base'); $this->assign('LAYOUT_HOME_TOP','home@'.$wsthomeStyle.'/top'); $this->assign('LAYOUT_HOME_HEADER','home@'.$wsthomeStyle.'/header'); $this->assign('LAYOUT_HOME_SHOP_APPLY','home@'.$wsthomeStyle.'/shop_apply'); $this->assign('LAYOUT_HOME_RIGHT_CART','home@'.$wsthomeStyle.'/right_cart'); $this->assign('LAYOUT_HOME_FOOTER','home@'.$wsthomeStyle.'/footer'); $this->assign('LAYOUT_HOME_SHOP_BASE','home@'.$wsthomeStyle.'/shops/base'); $this->assign('LAYOUT_HOME_SHOP_HEADER','home@'.$wsthomeStyle.'/shops/header'); $this->assign('LAYOUT_HOME_USER_BASE','home@'.$wsthomeStyle.'/users/base'); $this->assign('LAYOUT_HOME_USER_HEADER','home@'.$wsthomeStyle.'/users/header'); $this->assign('LAYOUT_ADMIN_BASE','admin@base'); $this->assign('LAYOUT_MOBILE_BASE','mobile@'.$wstmobileStyle.'/base'); $this->assign('LAYOUT_MOBILE_DIALOG','mobile@'.$wstmobileStyle.'/dialog'); $this->assign('LAYOUT_MOBILE_FOOTER','mobile@'.$wstmobileStyle.'/footer'); $this->assign('LAYOUT_WECHAT_BASE','wechat@'.$wstwechatStyle.'/base'); $this->assign('LAYOUT_WECHAT_DIALOG','wechat@'.$wstwechatStyle.'/dialog'); $this->assign('LAYOUT_WECHAT_FOOTER','wechat@'.$wstwechatStyle.'/footer'); } /** * @deprecated 建议使用 checkAuth和checkShopAuth区分商家 2017.04.25 */ public function checkPrivileges(){ $urls = model('home/HomeMenus')->getMenusUrl(); $request = request(); $visit = strtolower($request->path()); if(isset($urls[$visit])){ $menuType = (int)$urls[$visit]; $userType = -1; if((int)session('WST_USER.userId')>0)$userType = 0; if((int)session('WST_USER.shopId')>0)$userType = 1; //未登录不允许访问受保护的资源 if($userType==-1){ if($request->isAjax()){ echo json_encode(['status'=>-999,'msg'=>'对不起,您还没有登录,请先登录']); }else{ header("Location:".url('home/users/login')); } exit(); } //已登录但不是商家 则不允许访问受保护的商家资源 if($userType==0 && $menuType==1){ if($request->isAjax()){ echo json_encode(['status'=>-999,'msg'=>'对不起,您不是商家,请先申请为商家再访问']); }else{ header("Location:".url('home/shops/login')); } exit(); } } } public function checkAdminAuth(){ $STAFF = session('WST_STAFF'); $request = request(); if(empty($STAFF)){ if($request->isAjax()){ echo json_encode(['status'=>-999,'msg'=>'对不起,您还没有登录,请先登录']); }else{ header("Location:".url('admin/index/login')); } exit(); }else{ $urls = WSTVisitPrivilege(); $privileges = session('WST_STAFF.privileges'); $visit = $request->path(); if(!$privileges || (array_key_exists($visit,$urls) && !$this->checkUserCode($urls[$visit],$privileges))){ if($request->isAjax()){ echo json_encode(['status'=>-998,'msg'=>'对不起,您没有操作权限,请与管理员联系']); }else{ header("Content-type: text/html; charset=utf-8"); echo "对不起,您没有操作权限,请与管理员联系"; } exit(); } } } private function checkUserCode($urlCodes,$userCodes){ foreach ($urlCodes as $key => $value) { if(in_array($key,$userCodes))return true; } return false; } /** * @deprecated 建议使用checkAdminAuth,将来可能会移除. 2017.04.25 */ public function checkAdminPrivileges(){ $this->checkAdminAuth(); } // 登录验证方法--用户 protected function checkAuth(){ $USER = session('WST_USER'); if(empty($USER)){ if(request()->isAjax()){ die('{"status":-999,"msg":"您还未登录"}'); }else{ $module = WSTVisitModule(); $this->redirect($module.'/users/login'); exit; } } } //登录验证方法--商家 protected function checkShopAuth(){ $USER = session('WST_USER'); if(empty($USER) || $USER['userType']!=1){ if(request()->isAjax()){ die('{"status":-998,"msg":"您还未登录"}'); }else{ $module = WSTVisitModule(); $this->redirect($module.'/shops/login'); exit; } } } /** * 重写父类前置方法判断 */ protected function beforeAction($method, $options = []) { // 设置当前访问的controller、action request()->controller($this->controller); request()->action($this->action); if (isset($options['only'])) { if (is_string($options['only'])) { $options['only'] = explode(',', $options['only']); } if (!in_array($this->request->action(), $options['only'])) { return; } } elseif (isset($options['except'])) { if (is_string($options['except'])) { $options['except'] = explode(',', $options['except']); } if (in_array($this->request->action(), $options['except'])) { return; } } call_user_func([$this, $method]); } /** * 加载模板输出 * @access protected * @param string $template 模板文件名 * @param array $vars 模板输出变量 * @param array $replace 模板替换 * @param array $config 模板参数 * @return mixed */ public function fetch($template = '', $vars = [], $replace = [], $config = []){ $controller = Loader::parseName($this->controller); if ('think' == strtolower($this->config['type']) && $controller && 0 !== strpos($template, '/')) { $depr = $this->config['view_depr']; $template = str_replace(['/', ':'], $depr, $template); if ('' == $template) { // 如果模板文件名为空 按照默认规则定位 $template = str_replace('.', DS, $controller) . $depr . $this->action; } elseif (false === strpos($template, $depr)) { $template = str_replace('.', DS, $controller) . $depr . $template; } } $replace['__STYLE__'] = str_replace('/index.php','',\think\Request::instance()->root()).'/hyhproject/home/view/'.WSTConf('CONF.wsthomeStyle'); $replace['__ADMIN__'] = str_replace('/index.php','',\think\Request::instance()->root()).'/hyhproject/admin/view'; $replace['__WECHAT__'] = str_replace('/index.php','',\think\Request::instance()->root()).'/hyhproject/wechat/view/'.WSTConf('CONF.wstwechatStyle');; $replace['__MOBILE__'] = str_replace('/index.php','',\think\Request::instance()->root()).'/hyhproject/mobile/view/default'; return \Think\Controller::fetch($template, $vars, $replace, $config); } /** * 模板变量赋值 * @access protected * @param mixed $name 要显示的模板变量 * @param mixed $value 变量的值 * @return void */ public function assign($name, $value = ''){ $this->view->assign($name, $value); } }