浅解用PHP实现MVC( 三 )


class Login extends Action { function __construct() { parent::__construct(); } ? function index() {//登陆页面 $GLOBALS['debug'] = 0; $this->display(); } function islogin() { if ($_POST['user_username'] == null && $_POST['user_password'] == null) {//如果用户名为空 $this->error('用户名和密码不能为空', 1, ''); } $_POST['user_password'] = md5($_POST['user_password']); $_POST['user_repassword'] = md5($_POST['user_repassword']); if ($_POST['user_repassword'] != $_POST['user_password']) {//如果用户输入的两次密码不一致 $this->error('两次密码不一致', 1, ''); } $user = D('user'); $date = $user->field('uid,user_password')->where(array('user_username' => $_POST['user_username']))->find(); $_POST['uid'] = $date['uid']; if ($_POST['user_password'] != $date['user_password']) {//如果输入的密码与数据库密码不匹配 $this->error('密码不正确', 1, ''); } if (strtoupper($_POST['code']) != $_SESSION['code']) {//如果输入的验证码不正确 $this->error('验证码输入不正确', 1, ''); } $_SESSION = $_POST;//把posts所有的数据压入session $date = $user->query('SELECT free_user_group.group_muser,free_user_group.group_mweb,free_user_group.group_marticle,free_user_group.group_sendarticle,free_user_group.group_mimage,free_user_group.group_sendcomment,free_user_group.group_sendmessage,free_user.user_lock FROM free_user,free_user_group WHERE free_user.uid=' . $_SESSION['uid'] . ' AND free_user.gid=free_user_group.gid', 'select'); if ($date[0]['user_lock']) { $this->error('您的帐号已被锁定,请与管理员联系后再登录', 3, 'index/index'); } else { if ($date[0]['group_muser'] || $date[0]['group_marticle'] || $date[0]['group_mweb'] || $date[0]['group_mimage']) { //查询数据库中是否开启自动记录操作 $opernote = D('foreground'); //$_SESSION['oper']=D('OperDate'); $isOpenNote = $opernote->where(array('fid' => '1'))->field('operateNotes')->find(); //$_SESSION['operAuthor']=$operAuthior->where(array('id'=>'1'))->find(); $_SESSION['isOpenNotes'] = $isOpenNote['operateNotes']; $_SESSION['islogin'] = true; $_SESSION = array_merge($date[0], $_SESSION); $user->where($_SESSION['uid'])->update('user_onlinestatus=user_onlinestatus+1'); $this->success('登陆成功', 1, 'index/index'); } else { $this->error('您的权限不够无法进入后台', 1, ''); } } } function logout() {//退出时销毁session $user = D('user'); $_SESSION['islogin'] = false; $_SESSION = array(); if (isset($_COOKIE[session_name()])) { setCookie(session_name(), '', time() - 3600, '/'); } session_destroy(); $this->redirect('index'); } ? function code() {//显示验证码 echo new Vcode(); } }common.class.php 类
class Common extends Action { function init() { if (!(isset($_SESSION['islogin']) && $_SESSION['islogin'] == true)) { $this->redirect("login/index"); } $this->assign('session', $_SESSION); } }2) 操作的声明
每个操作对应的是控制器中的一个方法,比如在上面的Login控制器中

  • code()是一个获取验证码的操作,可以通过 yourhost:port/.../Login/code 这种方式访问该操作
  • logout()是一个退出登录的操作,可以通过yourhost:port/.../Login/logout这种方式访问该操作
3.3、视图(View)
视图的显示是基于Smarty模板引擎的,继承了Smarty类,并且重写了__construct,display,is_cached,clear_cache 方法 。
<?php
class Mytpl extends Smarty
{
/**
* 构造方法,用于初使化Smarty对象中的成员属性
*
*/
function __construct()
{
$this->template_dir = APP_PATH . "views/" . TPLSTYLE; //模板目录
$this->compile_dir = PROJECT_PATH . "runtime/comps/" . TPLSTYLE . "/" . TMPPATH; //里的文件是自动生成的,合成的文件
$this->caching = CSTART; //设置缓存开启
$this->cache_dir = PROJECT_PATH . "runtime/cache/" . TPLSTYLE; //设置缓存的目录
$this->cache_lifetime = CTIME; //设置缓存的时间
$this->left_delimiter = "<{"; //模板文件中使用的“左”分隔符号
$this->right_delimiter = "}>"; //模板文件中使用的“右”分隔符号
parent::__construct(); //调用父类被覆盖的构造方法
}
?
/*
* 重载父类Smarty类中的方法
* @param string $resource_name 模板的位置


推荐阅读