给点阳光系列之一 —— 登陆
原作者:浪子快刀
先给出我的结构
复制内容到剪贴板
代码:
◎ www.wxmh.cn(网站结构根目录)
┣━ ◎ lib(程序代码--web无法直接访问这里)
┃ ┣ ◎ FLEA(fleaPHP框架文件)
┃ ┣ ◎ smarty(smarty类--版本为2.6.14)
┃ ┣ ◎ templates_c(smarty所编译的文件)
┃ ┗ ◎ wxmh(MVC相关)
┃ ┣ ◎ class(为该网站所写的类跟函数----为该站所特有的)
┃ ┣ ◎ Config(设置文件)
┃ ┣ ◎ Controller()
┃ ┣ ◎ GD(自己写的通用类文件)
┃ ┗ ◎ Model()
┃
┗━ ◎ webRoot(网站根目录)
┣ ◎ admin(用户后台)
┗ ◎ wxmh(网站主程序)说明一下,我自己写的东西,统一称为GD.之所以把GD目录放在wxmh(也就是用户网站目录)下,主要是为了能够使用FleaPHP里如load_class()之类的方法.这样比较方便一点.
给出我的COMMON_APP_INF.php,代码如下:
该文件位于\
www.wxmh.cn\lib\wxmh\Config下
复制内容到剪贴板
代码:
<?php
return array(
// 应用程序设置
'controllerAccessor' => 'C',
'urlLowerChar' => false, // 是否将 url 参数中包含的控制器名字和动作名字强制转为小写(默认就是关掉的)
'responseCharset' => 'GB2312', // 指示 FleaPHP 输出内容的使用的编码
'databaseCharset' => 'GB2312', // 当 FleaPHP 连接数据库时,要指定的编码, // 数据库连接
'dbDSN' => array('driver' => 'mysql',
'host' => 'localhost',
'login' => 'root',
'password' => '',
'database' => 'marketplace_db',
),
// 启动smarty模版
'view' => 'FLEA_View_Smarty',
'viewConfig' => array('smartyDir' => GD_LIB_PATH . '/Smarty',
'template_dir' => GD_LIB_PATH,
'compile_dir' => GD_LIB_PATH . '/templates_c',
'left_delimiter' => '{{',
'right_delimiter' => '}}',
),
);
?>在admin目录下建议index.php文件,该文件内容如下:
复制内容到剪贴板
代码:
<?php
//====================================================
// FileName: index.php
// Summary: 后台的控制文件
// Author: lzkd(浪子快刀)/翁晖(外贸服装网)
// CreateTime: 2006-09-30
// LastModifed:
// copyright (c)2006
//====================================================
require_once( '../init.php' ); //载入系统初始文件
session_save_path( GD_WEB_PATH . '/admin/tmp' ); //建立session路径
require_once ( GD_FLEA_PATH . '/FLEA.php' ); //载入FleaPHP
@define( "GD_TPL_PATH", dirname(__FILE__) . "/template" ); //设定起用smarty模版后的模版文件存放地点
import( GD_LIBWEB_PATH ); //FleaPHP中所需要的路径指向
register_app_inf('wxmh/Config/COMMON_APP_INF.php'); //载入本站程序的基本配置文件
set_app_inf('defaultController', 'adminLogin'); //设定无任何参数默认的处理文件
run(); //运行程序
?>在lib\wxmh\GD下建议文件action.php内容如下:
复制内容到剪贴板
代码:
<?php
//======================================================
// FileName: action.php
// Summary: 继承了FleaPHP的FLEA_Controller_Action
// 可以方便的加入自己喜欢的方法
// Author: lzkd(浪子快刀)/翁晖(外贸服装网)
// CreateTime:
// LastModifed:
// copyright (c)
//======================================================
class GD_action extends FLEA_Controller_Action
{
/* 函数 isLoginned()
** 功能 判断用户是否登录
** 参数 无
** 返回 true 已登录 false 未登录
*/
function isLoginned()
{
if(!empty($_SESSION['isLogin']))
return true;
else
return false;
}
/* 函数 getParam( $name )
** 功能 取得页面参数
** 参数 $name 参数名字
*/
function getParam( $name )
{
if( isset( $_REQUEST[$name] ) )
{
if( is_array( $_REQUEST[$name] ) )
{
return $_REQUEST[$name]; //这里可以修改一下,数组里的每个数也可以加上trim
}
else
{
return trim( $_REQUEST[$name] );
}
}
else
return null;
}
}
?>
说明一下,以后所有的控制器都从这里派生出来.这么做的好处如下:
1 因为,GD_action继承了FLEA_Controller_Action,所以,可以很方便的生成一个控制器.
2 GD_action中可以加入你自己所习惯用的方法.
3 因为GD目录不在FLEA目录下,以后FLEA升级的时候很方便,直接把文件盖过去就可以了.在lib\wxmh\Model下建议文件adminLink.php,内容如下:
复制内容到剪贴板
代码:
<?php
//======================================================
// FileName: adminLink.php
// Summary: 操作管理员登陆模型
// Author: lzkd(浪子快刀)/翁晖(外贸服装网)
// CreateTime:
// LastModifed:
// copyright (c)
//======================================================
//FLEA_Com_RBAC_UsersManager是FleaPHP中提供的操作用户登陆的模型
load_class('FLEA_Com_RBAC_UsersManager');
class Model_adminLink extends FLEA_Com_RBAC_UsersManager
{
var $primaryKey = 'id'; //主键字段
var $tableName = 'user'; //数据表名
var $usernameField = 'user'; //用户名字段
var $emailField = 'email'; //电邮字段
var $passwordField = 'pass'; //密码字段
var $rolesField = 'roles'; //角色字段
var $encodeMethod = PWD_MD5; //加密方式
}
?>
说明一下,该类继承了FleaPHP中的FLEA_Com_RBAC_UsersManager,好处如下:
1 只要设定几个参数就可以直接使用FLEA_Com_RBAC_UsersManager中的方法.而且,我们一般不要去改FLEA_Com_RBAC_UsersManager中的默认值.理由很简单---以后升级方便
2 如果觉得FLEA_Com_RBAC_UsersManager里的方法还不够.可以在这里增加(或者放别的地方也可以)在lib\wxmh\Controller下建议文件adminLogin.php,内容如下:
复制内容到剪贴板
代码:
<?php
//======================================================
// FileName: adminLogin.php
// Summary: 管理后台登陆
// Author: lzkd(浪子快刀)/翁晖(外贸服装网)
// CreateTime:
// LastModifed:
// copyright (c)
//======================================================
//GD_action继承了FleaPHP的FLEA_Controller_Action,这样做的好处是,可以
//在GD_action中放上自己所习惯的方法.
load_class('GD_action');
class Controller_adminLogin extends GD_Action
{
//控制器的名字
var $controllerName = 'adminLogin';
//管理员登陆 对象实例
var $_modelAdminLink;
/* 函数 Controller_adminUser( $controllerName )
** 功能 构造函数
** 参数 $controllerName 应传入的控制器的名字
*/
function Controller_adminLogin()
{
parent::FLEA_Controller_Action( $this->controllerName );
}
/* 函数 actionIndex()
** 功能 默认控制器方法
** 登陆相关
** 参数 无
*/
function actionIndex()
{
if( $this->isLoginned() )
{
//已登陆,到后台首页
echo '后台首页';
}
else
{
//没有登陆,返回到登陆页面
if( $this->_isPOST() )
{
//如果是POST过来的进行登陆验证工作
$this->_medelAdminLink = & get_singleton('Model_adminLink');
//validateUser是FleaPHP本身提供的
if( $this->_medelAdminLink->validateUser($this->getParam('user'), $this->getParam('pass')) )
{
//通过检测
echo '后台首页';
}
else
{
//未通过检测
$this->vAdminLogin();
}
}
else
{
//如果不是POST过来的则
$this->vAdminLogin();
}
}
}
/* 函数 vAdminLogin()
** 功能 登陆页面
** 参数 无
*/
function vAdminLogin()
{
$smarty =& $this->_getView();
$smarty->assign( 'loginUrl', $this->_url() );
$smarty->display( GD_TPL_PATH . '/login.html');
}
}
?>说明一下,修改了一下老大
教程中的构造函数,没有用Controller_adminLogin( $controllerName ),而是用了Controller_adminLogin().个人觉得应该一样,以后要改控制器名字,也别跑构造函数里改了,直接在上面就可以改了.
另,老大.控制器的名字是这么写吧?
还有,欠了一个注销登陆的内容.好象没必要写了哦,很简单的.
给出模版代码
复制内容到剪贴板
代码:
<form name="form1" action="{{$loginUrl}}" method="post">
<input type="text" name="user"><br>
<input type="password" name="pass"><br>
<input type="submit" name="提交" value="提交">
</form>就这么多内容了,顺祝大家开心.天气渐渐凉了,小心身体.