<?php /** * 所有Controller控制器的基类 * * @name AbstractAction * @package library * @copyright yoho.inc * @version 1.0 (2015-9-15 11:55:25) * @author fei.hong <fei.hong@yoho.cn> */ namespace Action; use Yaf\Controller_Abstract; use Yaf\Dispatcher; use Plugin\Cache; class AbstractAction extends Controller_Abstract { /** * HTTP请求对象 * * @var object */ protected $_request; /** * 用户相关信息 */ protected $_uid = 0; protected $_uname = ''; /** * 存放模板数据 * * @var array */ protected $_data; /** * 初始化 */ public function init() { $this->_request = $this->getRequest(); // 设置环境变量 switch (APPLICATION_ENV) { case 'production': // 生产 $this->_view->assign('rlsEnv', true); break; case 'preview': // 预览 $this->_view->assign('preEnv', true); break; case 'testing': // 测试 $this->_view->assign('testEnv', true); break; case 'develop': // 开发 default: $this->_view->assign('devEnv', true); break; } } /** * 封装一下获取get参数 * * @param String $key * @param mixed $default * @return mixed */ protected function get($key, $default = null) { return $this->_request->getQuery($key, $default); } /** * 封装一下获取post参数 * * @param String $key * @param mixed $default * @return mixed */ protected function post($key, $default = null) { return $this->_request->getPost($key, $default); } /** * 封装一下获取YAF内部的参数 * * @param String $key * @param mixed $default * @return mixed */ protected function param($key, $default = null) { return $this->_request->getParam($key, $default); } /** * 关闭模板自动渲染 * * @return void */ protected function disableView() { Dispatcher::getInstance()->autoRender(false); } /** * 输出JSON数据到浏览器 * * @return void */ protected function echoJson($json) { headers_sent() || header('Content-Type: application/json; charset=utf-8;'); if (is_array($json)) { $json = json_encode($json); } echo $json; } /** * 返回JSON数据 * * @param int $code 状态编码 * @param string $message 提示信息 * @param mixed $data 数据内容 * @return json */ protected function returnJson($code, $message, $data) { return json_encode(array( 'code' => $code, 'message' => $message, 'data' => $data, )); } /** * 判断是不是AJAX请求 * * @return bool */ protected function isAjax() { return $this->_request->isXmlHttpRequest(); } /** * 跳转到错误页面 */ protected function error() { headers_sent() || header('Location: /error.html'); exit(); } /** * 设置Cookie * * @param string $name cookie的名字 * @param string $value cookie的值 * @param integer $expire cookie过期时间 * @param integer $path cookie可用的路径 * @param string $domain cookie可用域名 */ protected function setCookie($name, $value, $expire = 0, $path = '/', $domain = '.yohobuy.com') { setcookie($name, $value, $expire, $path, $domain); } /** * 返回Cookie变量 * * @param string $name cookie名称 * @param string $default 未获取到返回的默认值 * @return string 获取到的cookie值 */ protected function getCookie($name, $default = '') { return $this->_request->getCookie($name, $default); } /** * 设置缓存 * * @param string $key 键名 * @param mixed $value 需要缓存的数据 * @param int $expire 缓存有效期(单位秒, 0表示永久) * @return void */ protected function setCache($key, $value, $expire) { Cache::set($key, $value, $expire); } /** * 获取缓存 * * @param string $key 键名 * @param bool $isMaster 控制是到主服务器取,还是到从服务器取缓存 * @return mixed */ protected function getCache($key, $isMaster = true) { if ($isMaster) { return Cache::get($key, 'master'); } else { return Cache::get($key, 'slave'); } } /** * 获取当前登录的用户ID * * @return int * @todo */ protected function getUid() { if (!$this->_uid) { $cookie = $this->getCookie('_UID'); if (!empty($cookie)) { $cookieList = explode('::', $cookie); if (isset($cookieList[1]) && is_numeric($cookieList)) { $this->_uid = $cookieList[1]; $this->_uname = $cookieList[0]; } } } return $this->_uid; } /** * 获取客户端唯一标识 * * @return string */ protected function getUdid() { $udid = ''; $realIP = $this->_request->getServer('HTTP_X_REAL_IP'); if ($realIP) { $udid = md5($realIP); } else { $realIP = $this->_request->getServer('REMOTE_ADDR', ''); $udid = md5($realIP); } return $udid; } /** * 获取当前登录的用户名字 * * @return int * @todo */ protected function getUname() { if (!$this->_uname) { $cookie = $this->getCookie('_UID'); if (!empty($cookie)) { $cookieList = explode('::', $cookie); if (isset($cookieList[0])) { $this->_uname = $cookieList[0]; } } } return $this->_uname; } /* * 设置网站SEO的标题 * * @param string $title 标题 * @return void */ protected function setTitle($title) { $this->_view->assign('title', $title . ' | '); } /** * 设置网站SEO的关键词 * * @param string $keywords 关键词,多个之间用","逗号分隔 * @return void */ protected function setKeywords($keywords) { $this->_view->assign('keywords', rtrim($keywords, ',') . ','); } /** * 设置网站SEO的描述内容 * * @param string $description 描述内容 * @return void */ protected function setDescription($description) { $this->_view->assign('description', $description); } /** * 设置网站导航头部信息 * * @param string $title 头部标题 * @param string $backUrl 返回的链接 * @param string $homeUrl 返回首页的链接 * @return void */ protected function setNavHeader($title = '', $backUrl = true, $homeUrl = '/') { $header = array(); if ($backUrl) { $header['navBack'] = true; } if (!empty($title)) { $header['navTitle'] = $title; } if (!empty($homeUrl)) { $header['navHome'] = $homeUrl; } $this->_view->assign('pageHeader', $header); } /** * 设置网站导航底部信息 * * @return void */ protected function setNavFooter() { $footer = array(); // 已登录 @todo $name = $this->getUname(); if (!empty($name)) { $footer['user'] = array(); $footer['user']['name'] = $name; // 昵称 $footer['user']['url'] = ''; // 个人中心链接 $footer['user']['signoutUrl'] = '/passport/login/out'; // 登出链接 } // 未登录 else { $footer = array(); $footer['loginUrl'] = '/signin.html'; // 登录链接 $footer['signupUrl'] = '/reg.html'; // 注册链接 } $this->_view->assign('pageFooter', $footer); } /** * 设置侧边栏信息 * * @param string $guangChoosed 逛默认选中项 "all"表示全部,"boys":只看男生,"girls":只看女生 * @return void */ protected function setNavSide($guangChoosed = 'all') { $this->_view->assign('sideNav', \Index\SideModel::getLeftNav($guangChoosed)); } /** * 返回顶部软件下载有关数据 * @return array 下载有关数据 */ protected function getHeaderDownload() { return array( 'img' => 'http://img11.static.yhbimg.com/adpic/2015/02/28/18/01d83bfad41c8fca8fd1ad334216d7d733.jpg?imageView/2/w/640/h/480', 'url' => 'http://www.baidu.com' ); } /** * 设置首页以及频道页顶部信息 * * @return void */ protected function setHomeChannelHeader() { $header['searchUrl'] = '/search'; $this->_view->assign('homeHeader', $header); } /** * 返回顶部软件下载有关数据 * @return array 下载有关数据 */ protected function setHeaderDownload() { $download = array( 'img' => 'http://img11.static.yhbimg.com/adpic/2015/02/28/18/01d83bfad41c8fca8fd1ad334216d7d733.jpg?imageView/2/w/640/h/480', 'url' => 'http://www.baidu.com' ); $this->_view->assign('headerDownload', $download); } }