关于字段映射与其他操作的处理顺序问题

浏览:290 发布日期:2010/03/24
- 普通 - 未处理
我在数据库自动填充中碰到点问题 在隔壁发贴求教了
不过在代码中还存在着一个问题 不知道算不算bug
代码是 class UserModel extends Model {
    protected $trueTableName = 'user_t';
    protected $_map = array(
        'username'=>'u_name',
        'password'=>'u_pass'
    );
    protected $_validate = array(
         // array(field,rule,message,condition,type,when,params);
            array('username','/^[\x{4e00}-\x{9fa5}\x{f900}-\x{fa2d}A-Za-z0-9_~@#]{2,16}$/u','用户名须为2-16位中英字符,数字,下划线或符号~@#'),
            array('username','checknameunique','用户名已经存在!',0,'callback'),
            array('password','/^[\dA-Za-z(!@#$%&)]{4,16}$/','密码须为4-16位,含数字,英文或符号!@#$%&'),
            array('repassword','password','两次输入密码必须一致!',1,'confirm'),
            array('verify','checkverify','验证码输入错误',1,'callback'),
    );
    protected function checkverify($verify){
        if(md5($verify)==$_SESSION['verify'])
            return true;
        else 
            return false;
    }
    protected function checknameunique($uname)
    {
            if($this->getByU_name($uname))
                return false;
            else
                return true;
    }
    protected $_auto = array(
        // array('field','填充内容','填充条件','附加规则',[额外参数])
        //array('u_ip',$_SERVER['REMOTE_ADDR']),
        array('u_pass','md5',1,'function'),
        array('u_lastseen','getdbtime',1,'callback'),
        array('u_registertime','getdbtime',1,'callback')
    );
    function getdbtime(){
        $t=$this->query("SELECT NOW() as nowtime");
        return $t[0]['nowtime'];
    }
}
?>
但是在tp源码中可以看到
对字段映射的处理是在自动验证和自动填充以后的
就意味着我在    protected $_map = array(
        'username'=>'u_name',
        'password'=>'u_pass'
    );
中添加了映射 无奈却在自动检验和填充中却仍然需要使用原始的数据库的字段
尤其如果使用unique验证用户名唯一  array('username','','用户名已经存在!',0,'unique'),  array('u_name','','用户名已经存在!',0,'unique'),都是错的 对于1 是因为数据库中没有username字段 故一直验证为不唯一
对于2因为表单中没有u_name数据 故u_name为null 也一直验证不成功

P.S 我这句//array('u_ip',$_SERVER['REMOTE_ADDR']),去掉注释就报错 不知道该怎么写了 也想在此板求教一下~
评论(
后面还有条评论,点击查看>>