php-13

来源:互联网 发布:高中物理老师 知乎 编辑:程序博客网 时间:2024/06/05 07:39

 MVC架构:


      入口      
       |        
       C       
     /   \     
    /     \    
   M       V  

C调用M 完成CURD
C调用V 加载模板,渲染模板并输出

系统流程
thinkphp框架手册:http://document.thinkphp.cn/manual_3_2.html#system_process


1.视图(手册位置: 视图)

  模板存放位置和命名规范(首字母大写)
  模块/视图目录(View)/控制器名(去除Controller后的名字)/方法名(操作名)+模板扩展名(.html)  
 
  1)js+css+img ,放到Public ,创建Home目录,存放;
  2)把reg.html 放到 /Application/Home/View/Index/
  3)修改js css img  路径
  
  __PUBLIC__ : 会被替换成 /Public 
   (框架核心:ThinkPHP\Library\Behavior\ContentReplaceBehavior.class.php)


  备注: 只要模板文件按照命名规范存放,就可以直接使用


2.控制器类方法中调用模板并输出[C->V](手册位置: 控制器)

  2.1调用模板并渲染输出
   $this->display();//默认加载模板路径:当前模块/视图目录(View)/控制器名(目录)/方法名.html

   $this->display("[模块@][控制器:][方法名]");//完整格式可以调用其他页面
  
  2.2 U方法(自定义函数):用于动态生成URL地址,可以确保项目移植过程中不受环境影响;

   模板中使用:{:U('Index/regSave')}//{:函数 }模板中定界符,U参数: [模块/]控制器名/方法名

   方法中使用: U('Index/index')  //参数: [模块/]控制器名/方法名
  
  2.3 获取数据方法

    2.3.1 用原生的 $_POST/$_GET 获取
        
    2.3.2 I方法(自定义函数):用于获取数据(变量类型:post/get)

      I('变量类型.变量名','当不存在此变量时默认值'[,'过滤方法']);//省略第三参数默认过滤方式 htmlspecialchars
  
      I('post.')  获取所有post提交的数据 $_POST
      I('post.username')  获取表单中的username值
      I('post.username','') 
      I('post.username','','htmlspecialchars') 
      I('post.username','','/^[A-Za-z]{6,10}$/') 采用正则表达时进行变量过滤,不通过的话则返回默认值(第二个参数值)
      I('username') //找 get 或 post 中的username,不推荐使用
  
    2.3.3 Action参数绑定(参照手册位置:控制器->Action参数绑定)-扩展知识

      参数绑定是通过直接绑定URL地址中的变量作为操作方法的参数
      public function regsave($username[, ...]){//$username就是表单中的名称   
        echo $username;      
      }

  2.4 session(参照手册位置:  专题 ->SESSION支持 )


    1.4.1 原生 
     设置:$_SESSION['userid']=123;
     取值:$_SESSION['userid'];
    1.4.2 tp中方法
     session();//函数
     赋值:session('名称','值');
     取值:session('名称');

    1.4.3 销毁
    原生:unset($_SESSION['userid']);
    tp中方法:session('名称',null);

  2.5 信息提示和重定向(参照手册位置:  控制器->跳转和重定向 )

   2.5.1 信息提示
    提示成功,$this->success('提示信息','跳转地址',页面停留时间单位秒)    第二参数: [模块/]控制器名/方法名
    $this->success('注册成功',U('Index/index'),5);

    提示错误信息,默认返回上一页,并终止下面代码执行 ,$this->error('提示信息','跳转地址',页面停留时间单位秒)
  $this->error('用户名不能为空'); 

   区别:1)error结束执行之后代码,success后的代码会继续执行
        2)页面不一样

   2.5.2重定向,不提示信息,直接跳转

     $this->redirect('控制器/方法');

     redirect(U('控制器/方法'));    

3.自定义模型(Model,手册:模型)
  
  3.1定义
   模型类的命名规则 是除去表前缀的数据表名,采用驼峰法(首字母大写)+ Model

   文件名命名:UserModel.class.php(文件名和类名一致 + .class.php)  

   namespace Home\Model;
   use Think\Model;
   class UserModel extends Model{
      
   }

   模型名     表名(假设表前缀tp_)
   User       tp_user
   UserAddr   tp_user_addr


  3.2 D方法(函数), 来调用自定义模型

    D('User');同  new \Home\Model\UserModel();
   
    参数就是模型的名称,大小写要和模型名一直
    
   参数      实例化的模型文件(假设当前模块为Home)
   User      对应的模型类文件的 \Home\Model\UserModel.class.php
   UserType   对应的模型类文件的 \Home\Model\UserTypeModel.class.php

    M()和D()区别
    M: 用来实例化模型(默认),不需要自己定义模型类
    D: 用来实例化自定义模型,假如这个自定义模型类不存在,自动调用M;

  3.3 自动验证(自定义模型中,验证表单中的数据是否合法)
      
     protected $_validate = array(
     //验证字段(表单中名称) , 验证规则 , 错误提示 [, 验证条件 , 附加规则 , 验证时间]        
        array('username', 'require', '用户名不能为空',1),
        array('username', '/^[a-zA-Z]\w{5,9}$/', '用户名格式不对',0,'regex'),
        array('password', 'require', '密码不能为空'),
        array('password', 'password1', '两次密码不一致', 0, 'confirm', 3),
        array('username','','用户名已存在',0,'unique'),
      //array('email','email','邮箱格式错误'),
      //array('tel','/^1[34578]\d{9}$/','手机格式错误',0,'regex'),    
    );

  3.4 自动完成(自定义模型中,用来完成默认字段值的写入)

    protected $_auto=array(
        //完成字段(表中字段),完成规则[, 完成时间 , 附加规则]
        array('password','md5',3,'function'),
        array('reg_time','time',1,'function'),
        array('ip','getIp',1,'callback'),//调用当前类中的方法
    );
    
    protected  function getIp(){     
         return  $_SERVER['REMOTE_ADDR'];//获取客户段ip    
    }

  3.5 字段映射(自定义模型中,当表单中的名称和数据表中(User)字段名不一致时使用,)
    protected $_map = array(
       //  'user' =>'username', // 把表单中user映射到数据表的username字段      
     );

  3.6 使用自定义模型类完成注册(控制器类方法中使用)

     $user = D('User');//参数:模型名称, 实例化了 自定义模型类 new \Home\Model\UserModel();       
     if(!$user->create()){//有错误
        $this->error($user->getError()); //提示 验证规则中的错误提示
     }else{//验证通过,完成 数据保存
           
       //设置session
       $_SESSION['username'] = $user->username; //用户名,必须在add之前
       $id = $user->add(); //保存数据到表中,执行后 $user对象销毁
       if($id > 0) {
          session('uid', $id);//用户id
          $this->redirect('Index/index'); //直接跳转不提示 , 首页地址
       } else {
          $this->error('注册失败');
       }
           
    }  
  

原创粉丝点击