ThinkPHP – <用户管理系统>学习总结

项目已在github:https://github.com/1070794219/LaowuCMS-ThinkPHP
项目具体信息不再介绍


PHP发送邮件

参考代码:链接

第一次接触该代码是2年前,那时候完美运行,但是这次使用的时候无法发送,debug提示认证失败,后来采取ssl方式登录,以QQ为例,即代码中smtp服务器和端口改为

$smtpserver = "ssl://smtp.qq.com";
$smtpserverport =465;//SMTP服务器端口

这时候账号使用QQ或者邮箱账号,密码则不再是登录密码,而是所谓的授权码。(126,qq之类都已经有这个设置项)


手机模板

这里重写display方法来实现。
由于本人第一次使用TP开发一套完整的系统,所以解决方案不太完善,欢迎各位指点,联系方式在About Me里面.

首先我们所有Controller都继承自CommonController,所以我们将重写的display放在里面。

	//重构display方法,实现手机版跳转
	public function display($templateFile = '', $charset = '', $contentType = '', $content = '', $prefix = '')
    {
 
        $template = null;
        $tplName = null;
        if($templateFile){
        	//传入值
        	$template = $templateFile;

            //判断success和error
        	//获取模板名字
	        $temp = explode("/", $template);
	        $tplName = $temp[count($temp) - 1];
        }else{
        	$template = ucfirst(CONTROLLER_NAME) . '/' . ACTION_NAME;
        }


        if(isMobile())
        {
        	//如果传入模板
            // echo $tplName;
        	if ($tplName) {
                if ($tplName != "dispatch_jump.tpl") {
                    $template = ucfirst(CONTROLLER_NAME) . '/' . "m_" . $tplName;
                }else{
                    $template = $templateFile;
                }
        	}else{
        		$template = ucfirst(CONTROLLER_NAME) . '/' . "m_" . ACTION_NAME;
        	}
        }
        try{
        	// echo $templateFile;
        	// echo $template;
            parent::display($template, $charset, $contentType, $content, $prefix);
        }catch(\Exception $e) {
            header('HTTP/1.1 404 Not Found');
        }
    }

首先判断调用的是$this->display()方法还是$this->display(‘模板’);

如果使用的第二种,那我们需要拿到模板的名称,在头部加上m_前缀即为调用移动模板
其中我们还判断了模板名是否为 “dispatch_jump.tpl”,(此模板为$this->success()和$this->error()时展示的模板),如果是该模板则直接使用(即不加m_前缀);

如果使用的第一种,则直接设置模板为 控制器名称/m_方法名

其中我们还使用了isMobile()方法,此方法为TP官方论坛提供的方法,写在Common/Common/function.php中


//验证手机版
function isMobile() {
    // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
    if (isset ($_SERVER['HTTP_X_WAP_PROFILE']))
        return true;
    
    //此条摘自TPM智能切换模板引擎,适合TPM开发
    if(isset ($_SERVER['HTTP_CLIENT']) &&'PhoneClient'==$_SERVER['HTTP_CLIENT'])
        return true;
    //如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
    if (isset ($_SERVER['HTTP_VIA']))
        //找不到为flase,否则为true
        return stristr($_SERVER['HTTP_VIA'], 'wap') ? true : false;
    //判断手机发送的客户端标志,兼容性有待提高
    if (isset ($_SERVER['HTTP_USER_AGENT'])) {
        $clientkeywords = array(
            'nokia','sony','ericsson','mot','samsung','htc','sgh','lg','sharp','sie-','philips','panasonic','alcatel','lenovo','iphone','ipod','blackberry','meizu','android','netfront','symbian','ucweb','windowsce','palm','operamini','operamobi','openwave','nexusone','cldc','midp','wap','mobile'
        );
        //从HTTP_USER_AGENT中查找手机浏览器的关键字
        if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
            return true;
        }
    }
    //协议法,因为有可能不准确,放到最后判断
    if (isset ($_SERVER['HTTP_ACCEPT'])) {
        // 如果只支持wml并且不支持html那一定是移动设备
        // 如果支持wml和html但是wml在html之前则是移动设备
        if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) {
            return true;
        }
    }
    return false;
}

同时贴上自定义的ajaxReturn方法

function ajaxReturn($message, $code=1, $data = array())
{
    $param = array(
        'code' => $code,
        'message' => $message,
        'data' => (is_array($data) ? $data : array())
    );
    if( IS_AJAX )
    {
        header('Content-Type:application/json; charset=utf-8');
        exit(json_encode($param));
    }
    exit(include_once(__DIR__.DIRECTORY_SEPARATOR.'error.html'));
}