HuodongAction.php 8.88 KB
<?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 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)
    {
        Session::start('yohobuy_session', null, 'yohobuy.com')->__set($name, $value);
    }

    /**
     * 获取Session
     * 
     * @param string $name 名称
     */
    public function getSession($name)
    {
        return Session::start('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);
    }

}