<?php /** * 所有Controller控制器的基类 * * @name HuodongAction * @package library * @copyright yoho.inc * @version 1.0 (2015-11-27 14:40:21) * @author fei.hong <fei.hong@yoho.cn> */ namespace Action; use Yaf\Controller_Abstract; use Yaf\Dispatcher; use Yaf\Application; use Plugin\Cache; use Hood\Session; class HuodongAction extends Controller_Abstract { /** * HTTP请求对象 * * @var object */ protected $_request; /** * 用户相关信息 */ protected $_uid = 0; protected $_uname = ''; /** * 存放模板数据 * * @var array */ protected $_data; /** * 是否是APP访问 * * @var bool */ protected $_isApp; /** * 初始化 */ public function init() { $this->_request = $this->getRequest(); $config = Application::app()->getConfig()->get('application'); if (isset($config->js->url)) { $this->_view->assign('jsUrl', $config->js->url); } if (isset($config->css->url)) { $this->_view->assign('cssUrl', $config->css->url); } if (isset($config->css->url)) { $this->_view->assign('imgUrl', $config->img->url); } $this->_isApp = (null !== $this->get('app_version') || null !== $this->get('uid')); } /** * 封装一下获取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 string $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) { Session::start('huodong_yohobuy_session', null, 'yohobuy.com')->__set($name, $value); } /** * 获取Session * * @param string $name 名称 */ public function getSession($name) { return Session::start('huodong_yohobuy_session', null, 'yohobuy.com')->__get($name); } /** * 获取当前登录的用户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[1])) { $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; } /* * 设置网站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 $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); } }