Authored by whb

PC重构

<?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;
use Plugin\Helpers;
use Hood\Session;
class AbstractAction extends Controller_Abstract
{
/**
* HTTP请求对象
*
* @var object
*/
protected $_request;
/**
* 用户相关信息
*/
protected $_vip;
protected $_uid = 0;
protected $_uname = '';
protected $_usession = '';
protected $_useSession = true;
/**
* 存放模板数据
*
* @var array
*/
protected $_data;
/**
* 初始化
*/
public function init()
{
$this->_request = $this->getRequest();
// 设置环境变量
switch (APPLICATION_ENV) {
case 'production': // 生产
$this->_view->assign('rlsEnv', true);
$this->_useSession = true;
break;
case 'preview': // 预览
$this->_view->assign('preEnv', true);
$this->_useSession = true;
break;
case 'testing': // 测试
$this->_view->assign('testEnv', true);
$this->_useSession = true;
break;
case 'develop': // 开发
default:
$this->_view->assign('devEnv', true);
$this->_useSession = false;
break;
}
}
/**
* 封装一下获取get参数
*
* @param String $key
* @param mixed $default
* @return mixed
*/
protected function get($key = null, $default = null)
{
if (null === $key) {
return $_GET;
}
return $this->_request->getQuery($key, $default);
}
/**
* 封装一下获取post参数
*
* @param String $key
* @param mixed $default
* @return mixed
*/
protected function post($key = null, $default = null)
{
if (null === $key) {
return $_POST;
}
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);
}
/**
* 封装一下获取服务器的参数
*
* @param String $key
* @param mixed $default
* @return mixed
*/
protected function server($key, $default = null)
{
return $this->_request->getServer($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();
}
/**
* 跳转到指定的URL
*
* @param string $url 链接地址
* @return void
*/
protected function go($url)
{
headers_sent() || header('Location: ' . $url);
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');
}
}
/**
* 设置Session
*
* @param string $name 名称
* @param mixed $value 值
* @return void
*/
public function setSession($name, $value)
{
if ($this->_useSession) {
Session::start('yohobuy_session', null, 'yohobuy.com')->__set($name, $value);
}
}
/**
* 获取Session
*
* @param string $name 名称
* @return mixed
*/
public function getSession($name)
{
if ($this->_useSession) {
return Session::start('yohobuy_session', null, 'yohobuy.com')->__get($name);
} else {
return '';
}
}
/**
* 获取当前登录的用户ID
*
* @param bool $useSession (true:从服务端session中检查, false:从客户端cookie中检查)
* @return int
*/
protected function getUid($useSession = false)
{
// 控制是否启用SESSION
if (!$this->_useSession) {
$useSession = false;
}
//$useSession = false;
if (!$this->_uid) {
$cookie = $this->getCookie('_UID');
// 兼容老的
if (!empty($cookie)) {
$cookieList = explode('::', $cookie);
if (isset($cookieList[1]) && is_numeric($cookieList[1])) {
if ($useSession) {
$token = $this->getSession('_TOKEN');
if (empty($token)) {
$token = $this->getCookie('_TOKEN');
}
if ($token === Helpers::makeToken($cookieList[1])) {
$this->_uid = $cookieList[1];
}
} else {
$this->_uid = $cookieList[1];
}
$this->_uname = $cookieList[0];
$this->_usession = $cookieList[3];
$this->_vip = $cookieList[2];
}
}
// 新的, 如果老站没有同步成功,再尝试从SESSION获取
elseif ($useSession) {
$uid = $this->getSession('_LOGIN_UID');
if (!empty($uid)) {
$this->_uid = $uid;
}
}
}
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;
}
/*
* 设置网站SEO的标题
*
* @param string $title 标题
* @param string $sign 连接的字符串
* @param bool $showMore 是否显示更多内容
* @return void
*/
protected function setTitle($title, $showMore = true, $sign = ' | ')
{
$this->_view->assign('title_more', $showMore);
$this->_view->assign('title', $title . $sign);
}
/**
* 设置网站SEO的关键词
*
* @param string $keywords 关键词,多个之间用","逗号分隔
* @return void
*/
protected function setKeywords($keywords)
{
$this->_view->assign('keywords', rtrim($keywords, ',') . ',');
}
/**
* 设置网站SEO的描述内容
*
* @param string $description 描述内容
* @param bool $showMore 是否显示更多内容
* @param string $sign 连接的字符串
* @return void
*/
protected function setDescription($description, $showMore = true, $sign = ' ')
{
$this->_view->assign('description_more', $showMore);
$this->_view->assign('description', $description . $sign);
}
/**
* 设置网站导航头部信息
*
* @param string $title 头部标题
* @param mixed $backUrl 返回的链接
* @param string $homeUrl 返回首页的链接
* @return void
*/
protected function setNavHeader($title = '', $backUrl = true, $homeUrl = '/', $navBtn = false)
{
$header = array();
// // 判断是否是微信浏览器浏览
// if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') === false) {
// $header['isShow'] = true;
// }
if ($backUrl) {
$header['navBack'] = true;
if (is_string($backUrl) && $backUrl != '') {
$header['backUrl'] = $backUrl;
}
}
if (!empty($title)) {
$header['navTitle'] = $title;
}
if (!empty($homeUrl)) {
$header['navHome'] = $homeUrl . '?go=1&t=' . time();
}
if ($navBtn) {
$header['navBtn'] = true;
}
// 默认使用男生的头部
$header['boys'] = true;
$controller = $this->getRequest()->getControllerName();
if ($controller !== 'Home') {
// 根据COOKIE记录的频道进行导航定位
$channel = Helpers::getChannelByCookie();
switch ($channel) {
default:
case 1:
$header['boys'] = true;
break;
case 2:
$header['girls'] = true;
break;
case 3:
$header['kids'] = true;
break;
case 4:
$header['lifeStyle'] = true;
break;
}
}
$this->_view->assign('pageHeader', $header);
}
/**
* 设置网站导航底部信息
*
* @return void
*/
protected function setNavFooterTab()
{
$this->_view->assign('showFooterTab', array(
'indexUrl' => Helpers::url('/?go=1'), //首页
'categoryUrl' => Helpers::url('/cate'), // 分类
'guangUrl' => Helpers::url('', null, 'guang'), // 逛首页
'shoppingCartUrl' => Helpers::url('/cart/index/index'), // 购物车
'mineUrl' => Helpers::url('/home'), // 个人中心
));
}
/**
* 设置侧边栏信息
*
* @param string $guangChoosed 逛默认选中项 "all"表示全部,"boys":只看男生,"girls":只看女生
* @return void
*/
protected function setNavSide($guangChoosed = 'all')
{
$this->_view->assign('sideNav', \Index\SideModel::getLeftNav($guangChoosed));
}
/**
* 设置最后修改时间
*
* @param string $modifiedTime 修改时间戳
* @param type $notModifiedExit 是否在没有修改时返回304状态
* @return void
*/
public static function setLastModified($modifiedTime, $notModifiedExit = true)
{
$modifiedTime = date('D, d M Y H:i:s ', $modifiedTime) . 'GMT';
if ($notModifiedExit && isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && $modifiedTime == $_SERVER['HTTP_IF_MODIFIED_SINCE']) {
header('HTTP/1.1 304 Not Modified');
exit();
}
header('Last-Modified: ' . $modifiedTime);
}
/**
* 设置浏览器的缓存
*
* @param int $seconds 单位是秒
* @return void
*/
public static function setExpires($seconds = 180)
{
$time = date('D, d M Y H:i:s ', time() + $seconds) . 'GMT';
header('Expires: ' . $time);
}
}
<?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;
use Plugin\Helpers;
use Hood\Session;
class AbstractAction extends Controller_Abstract
{
/**
* HTTP请求对象
*
* @var object
*/
protected $_request;
/**
* 用户相关信息
*/
protected $_vip;
protected $_uid = 0;
protected $_uname = '';
protected $_usession = '';
protected $_useSession = true;
/**
* 存放模板数据
*
* @var array
*/
protected $_data;
/**
* 初始化
*/
public function init()
{
$this->_request = $this->getRequest();
// 设置环境变量
switch (APPLICATION_ENV) {
case 'production': // 生产
$this->_view->assign('rlsEnv', true);
$this->_useSession = true;
break;
case 'preview': // 预览
$this->_view->assign('preEnv', true);
$this->_useSession = true;
break;
case 'testing': // 测试
$this->_view->assign('testEnv', true);
$this->_useSession = true;
break;
case 'develop': // 开发
default:
$this->_view->assign('devEnv', true);
$this->_useSession = false;
break;
}
}
/**
* 封装一下获取get参数
*
* @param String $key
* @param mixed $default
* @return mixed
*/
protected function get($key = null, $default = null)
{
if (null === $key) {
return $_GET;
}
return $this->_request->getQuery($key, $default);
}
/**
* 封装一下获取post参数
*
* @param String $key
* @param mixed $default
* @return mixed
*/
protected function post($key = null, $default = null)
{
if (null === $key) {
return $_POST;
}
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);
}
/**
* 封装一下获取服务器的参数
*
* @param String $key
* @param mixed $default
* @return mixed
*/
protected function server($key, $default = null)
{
return $this->_request->getServer($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)
{
headers_sent() || header('Content-Type: application/json; charset=utf-8;');
return json_encode(array(
'code' => $code,
'message' => $message,
'data' => $data,
));
}
/**
* JSON输出
* @param $code
* @param null $message
* @param null $data
*/
protected function helpJsonResult($code, $message = null, $data = null)
{
header('Content-type: application/json');
echo json_encode(array('code' => $code, 'message' => $message, 'data' => $data));
exit();
}
/**
* JSONP Callback输出,用于远程调用
* @param $callbackString
* @param $code
* @param null $message
* @param null $data
*/
protected function helpJsonCallbackResult($callbackString, $code, $message = null, $data = null)
{
header('Content-type: application/json');
echo $callbackString . "(";
echo json_encode(array('code' => $code, 'message' => $message, 'data' => $data));
echo ")";
exit();
}
/**
* 判断是不是AJAX请求
*
* @return bool
*/
protected function isAjax()
{
return $this->_request->isXmlHttpRequest();
}
/**
* 跳转到错误页面
*/
protected function error()
{
headers_sent() || header('Location: /error.html');
exit();
}
/**
* 跳转到指定的URL
*
* @param string $url 链接地址
* @return void
*/
protected function go($url)
{
headers_sent() || header('Location: ' . $url);
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');
}
}
/**
* 设置Session
*
* @param string $name 名称
* @param mixed $value 值
* @return void
*/
public function setSession($name, $value)
{
if ($this->_useSession) {
Session::start('yohobuy_session', null, 'yohobuy.com')->__set($name, $value);
}
}
/**
* 获取Session
*
* @param string $name 名称
* @return mixed
*/
public function getSession($name)
{
if ($this->_useSession) {
return Session::start('yohobuy_session', null, 'yohobuy.com')->__get($name);
} else {
return '';
}
}
/**
* 获取当前登录的用户ID
*
* @param bool $useSession (true:从服务端session中检查, false:从客户端cookie中检查)
* @return int
*/
protected function getUid($useSession = false)
{
// 控制是否启用SESSION
if (!$this->_useSession) {
$useSession = false;
}
$useSession = false;
if (!$this->_uid) {
$cookie = $this->getCookie('_UID');
if (!empty($cookie)) {
$cookieList = explode('::', $cookie);
if (isset($cookieList[1]) && is_numeric($cookieList[1])) {
if ($useSession) {
$token = $this->getSession('_TOKEN');
if (empty($token)) {
$token = $this->getCookie('_TOKEN');
}
if ($token === Helpers::makeToken($cookieList[1])) {
$this->_uid = $cookieList[1];
}
} else {
$this->_uid = $cookieList[1];
}
$this->_uname = $cookieList[0];
$this->_usession = $cookieList[3];
$this->_vip = $cookieList[2];
}
}
}
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;
}
/*
* 设置网站SEO的标题
*
* @param string $title 标题
* @param string $sign 连接的字符串
* @param bool $showMore 是否显示更多内容
* @return void
*/
protected function setTitle($title, $showMore = true, $sign = ' | ')
{
$this->_view->assign('title_more', $showMore);
$this->_view->assign('title', $title . $sign);
}
/**
* 设置网站SEO的关键词
*
* @param string $keywords 关键词,多个之间用","逗号分隔
* @return void
*/
protected function setKeywords($keywords)
{
$this->_view->assign('keywords', rtrim($keywords, ',') . ',');
}
/**
* 设置网站SEO的描述内容
*
* @param string $description 描述内容
* @param string $sign 连接的字符串
* @param bool $showMore 是否显示更多内容
* @return void
*/
protected function setDescription($description, $showMore = true, $sign = ' ')
{
$this->_view->assign('description_more', $showMore);
$this->_view->assign('description', $description . $sign);
}
/**
* 设置网站导航头部信息
*
* @param string $title 头部标题
* @param mixed $backUrl 返回的链接
* @param string $homeUrl 返回首页的链接
* @return void
*/
protected function setNavHeader($title = '', $backUrl = true, $homeUrl = '/', $navBtn = false)
{
$header = array();
// // 判断是否是微信浏览器浏览
// if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') === false) {
// $header['isShow'] = true;
// }
if ($backUrl) {
$header['navBack'] = true;
if (is_string($backUrl) && $backUrl != '') {
$header['backUrl'] = $backUrl;
}
}
if (!empty($title)) {
$header['navTitle'] = $title;
}
if (!empty($homeUrl)) {
$header['navHome'] = $homeUrl . '?go=1&t=' . time();
}
if ($navBtn) {
$header['navBtn'] = true;
}
// 默认使用男生的头部
$header['boys'] = true;
$controller = $this->getRequest()->getControllerName();
if ($controller !== 'Home') {
// 根据COOKIE记录的频道进行导航定位
$channel = Helpers::getChannelByCookie();
switch ($channel) {
default:
case 1:
$header['boys'] = true;
break;
case 2:
$header['girls'] = true;
break;
case 3:
$header['kids'] = true;
break;
case 4:
$header['lifeStyle'] = true;
break;
}
}
$this->_view->assign('pageHeader', $header);
}
/**
* 设置网站导航底部信息
*
* @return void
*/
protected function setNavFooterTab()
{
$this->_view->assign('showFooterTab', array(
'indexUrl' => Helpers::url('/?go=1'), //首页
'categoryUrl' => Helpers::url('/cate'), // 分类
'guangUrl' => Helpers::url('', null, 'guang'), // 逛首页
'shoppingCartUrl' => Helpers::url('/cart/index/index'), // 购物车
'mineUrl' => Helpers::url('/home'), // 个人中心
));
}
/**
* 设置侧边栏信息
*
* @param string $guangChoosed 逛默认选中项 "all"表示全部,"boys":只看男生,"girls":只看女生
* @return void
*/
protected function setNavSide($guangChoosed = 'all')
{
$this->_view->assign('sideNav', \Index\SideModel::getLeftNav($guangChoosed));
}
/**
* 设置最后修改时间
*
* @param string $modifiedTime 修改时间戳
* @param type $notModifiedExit 是否在没有修改时返回304状态
* @return void
*/
public static function setLastModified($modifiedTime, $notModifiedExit = true)
{
$modifiedTime = date('D, d M Y H:i:s ', $modifiedTime) . 'GMT';
if ($notModifiedExit && isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && $modifiedTime == $_SERVER['HTTP_IF_MODIFIED_SINCE']) {
header('HTTP/1.1 304 Not Modified');
exit();
}
header('Last-Modified: ' . $modifiedTime);
}
/**
* 设置浏览器的缓存
*
* @param int $seconds 单位是秒
* @return void
*/
public static function setExpires($seconds = 180)
{
$time = date('D, d M Y H:i:s ', time() + $seconds) . 'GMT';
header('Expires: ' . $time);
}
}
... ...