• ThinkPHP学习笔记


    Thinkphp学习文档:http://doc.thinkphp.cn/manual/start.html

    thinkphp命名 文件名采用驼峰法,首字母大写, 类名和文件名一致方法和属性采用驼峰法,首字母大写 函数名采用小写字母加下划线 数据表加字段采用小写字母加下划线 配置参数和常量使用大写字母加下划线以 双下划线打头的是魔术方法
    目录    说明
    Common    项目公共文件目录,一般放置项目的公共函数
    Conf    项目配置目录,项目所有的配置文件都放在这里
    Lang    项目语言包目录(可选 如果不需要多语言支持 可删除)
    Lib    项目类库目录,通常包括Action和Model子目录
    Tpl    项目模板目录,支持模板主题
    Runtime    项目运行时目录,包括Cache(模板缓存)、Temp(数据缓存)、Data(数据目录)和Logs(日志文件)子目录,如果存在分组的话,则首先是分组目录。
    thinkphp惯例配置文件
         Thinkphp/common/convention.php
    项目配置文件
         Conf/config.php
    thinkPHP缓存
        define('RUNTIME_PATH','./MyApp/temp/');   定义缓存存放路径
        define('NO_CACHE_RUNTIME',True);    不生成核心缓存
        define('STRIP_RUNTIME_SPACE',false);  对于编译缓存的内容是否去掉空白和注释
    thinkPHP类库导入,Think,ORG,Com将默认为系统基类库下相关目录
        import("Think[ORG][Com].util.session")  将导入系统基类的lib/Think[ORG][Com]/util/session.class.php
        import("MyApp.Action.UserAction")  将导入MyApp/lib/Action/UserAction.class.php
           等同于 import("@.Action.UserAction");
        Vendor('Zend.Filter.Dir')  将导入第三方类库目录vendor/zend/fileter/dir.php
        'APP_AUTOLOAD_PATH'     => 'Think.Util.,ORG.Util.', 设置附加文件的自动导入路径,增加了一个ORG目录下
        ,注意需要多加一个点。  
    thinkPHP分组
        配置文件中加入
              'APP_GROUP_LIST'=>'Home,Admin',
                'DEFAULT_GROUP'=>'Home',
        项目目录结构中,每层加上Home,Admin的文件夹分层
        访问效果
           index.php/Home/index,由于Home是默认分组,所以还可以写为 index.php/index
           idnex.php/Admin/index
        model类可以不分组
    URL伪静态
      'URL_HTML_SUFFIX'  =>'.shtml',   将所有路径后加上.shtml的伪静态效果
    URL重写
    apache的http.conf配置文件中加载 mod_rewrite.so模块
    AllowOverride None的None改为All
    确保URL_MODEL设置为2
    将.htaccess文件放到入口文件同级目录下
    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
    </IfModule>
    重启后就可以省略掉index.php 
    URL访问不再区分大小写
         'URL_CASE_INSENSITIVE' => true
     但如果我们定义一个UserTypeAction模块类,相应的多单词的模块名将变为   
           /index.php/user_type/list
      而不能是
          /index.php/usertype/list
    空操作
       如果系统找不到相应的方法,将定位于_empty方法
           Public function _empty(){
       如果找不到相应的模块,将定位于空模块EmptyAction
              Class EmptyAction extends Action{
     
    调用其他项目的其他模块中的方法
       R("User","importUser","App2")   调用app2项目中的 UserAction模块中的importUser方法 
       R方法的调用格式:
         R('[项目://][分组/]模块/操作','参数','控制器层名称') 
         R('Admin://Tool/User/info') //表示调用Admin项目Tool分组的User模块的info操作方法
        R('User/info',array(15))    表示调用当前项目的User模块的info操作方法,并且id参数传入15
    重定向
    success可以设置为ajax返回,如:$this->success("新增成功!",true) 
    还可以使用重定向    $this->redirect('User/list', array('cate_id'=>2), 5,'页面跳转中~')
    停留5秒后跳转刡User模块癿list操作,并且显示页面跳转中字样 
    thinkphp的curd操作
    连贯操作不分前后,select在最后即可
    where方法,查询范围定义
    table定义要操作的数据表 $model->table('think_user user')->where('id=1')->select();
    data方法在新增和保存数据之前对数据对象赋值
    field方法定义要查询的字段 $model->field('id,nickname as name')->select();
    order方法 对结果进行排序 order('id desc,statue desc')
    limit方法对结果限制 limit('offset,length')
    distinct对查询结果进行唯一过滤 $model->disctinct(true)->select()
    插入数据
      方式一:
    $model=M('User'); $model->create(); $model->add();
     方式二:
       M('User')->add($data); 
    读取数据 $model=M('User');
      //不等于条件(id!=2),where条件的写法
      $where['id'] = array('neq',2);
      //查询id为1,2,5的值,where条件:
      where(array('id'=>array('in','1,2,5')));
       $list=$model->where('status=1')->order('create_time')->limit(10)->select()/find()/getField('id,name');//返回的是数组
         find方法只返回一条记录,getField方法返回指定字段值
    更新数据
      方式一:
    $model=M('User'); $data['name']='Thinkphp'; $data['email']='Thinkphp@gmail.con'; $model->where('id=5')->save($data);
      方式二:
      M('User')->save($data);//$data中含主键 或者: $model=M('User'); $model->where('id=5')->setField('name','Thinkphp'); ->setField(array('name','email'),array('Thinkphp','Thinkphp@gmail.com')); ->setInc('score','id=5',3); id等于5的用户积分加3 ->setDec('score','id=5',3) id等于5的用户积分减5 删除数据 $model=M('User'); $model->where('id=5')->delete(); $model->where('status=0')->delete();

    实例化空模型类

    如果需要使用原生 SQL ,需要实例化一个空模型:

    M()->query('SELECT * FROM think_user');

    thinkphp自动验证和自动完成
      令牌验证
         在action中建立接受提交数据的方法,写入create方法  if( $user->create()){}  
         在模板中建立<form>,method设置为post方法,将自动加上令牌
         在配置文件中可以使用 'TOKEN_ON'=>false;来关闭令牌
      自动验证
        需要在model中定义$validate属性,格式为:
        array(验证字段,验证规则,错误提示,验证条件,附加规则,验证时间)
           验证字段:需要验证的字段
           验证规则:需要验证的规则,需要结合附加规则
           错误提示:如果出现错误,需要一个什么样的提示
           验证条件:0存在字段就验证(默认) 1必须验证 2值不为控时候验证
           附加规则:配合验证规则,regex 前面是使用正则验证 function前面是使用函数验证 confirm 前面定义的是一个字段名,验证两个字段是否相等 equal验证是否等于某一个值 in验证是否在某个范围内 unique验证是否唯一 callback使用方法验证,前面规则是本类的一个方法
           TP封装:require 字段必须验证;eamil 验证邮箱;url 验证url地址;currency 货币;number 数字
           验证时间:1 新增数据时候验证 2 编辑数据时候验证 3 全部情况下验证(默认)
        
           UserModel.class.php
                class UserModel extends Model{                                  //对应数据库中的表user
          protected $_validate=array(
              array('username','require','用户名必填'),
              array('username','checklen','用户名长度过长或过短',0,'callback'),
              array('password','require','密码必填'),
              array('repassword','require','重复密码必填'),
              array('password','repassword','两次密码不一致',0,'confirm'),
              array('createtime','number','您输入的不是数字'),
              array('createip','email','邮箱格式不正确'),
              array('verify','require','验证码必须!'), //默认情冴下用正则迕行验证
                      array('name','','帐号名称已绊存在!',0,’unique’,1), // 在新增癿旪候验证name字段是否唯一
          ); 
          function checklen($data){
              if(strlen($data)>15 || strlen($data)<5){
                  return false;
              }else{
                  return true;
              }
          }
            
      }
    UserAction.class.php
       class UserAction extends Action {     
           function reg(){
               $this->display();    
           }
         
           function regadd(){
               $user=D('user');
               if($user->create()){
                   if($user->add()){
                       $this->success('注册成功');    
                   }else{
                       $this->error('注册失败');    
                   }
               }else{
                   $this->error($user->getError());    
               }     
           }     
      }
      自动完成
        在model类定义的$_auto属性,可以完成数据自动处理,格式为:
           array(填充字段,填充内容,填充条件,附加规则)
               填充字段:需要处理的字段
               填充条件:1新增时候处理 2更新数据的时候处理 3所有情况都处理
               附加规则:function使用函数 callback回调方法,内容是当前模型的一个方法 field填充内容是一个字段的值 string填充的是一个字符串
         protected $_auto = array (
          array( 'status','1'),   //  新增的时候把 status字段设置为 1
          array('password','md5',1,'function') ,  //  对password 字段在新增的时候使 md5 函数处理
          array('name','getName',1,'callback'), // 对name字段在新增癿旪候回调getName方法
          array('createtime','time',3,'function' ),  //  对create_time 字段在更新的时候写入当前时间戳
        ); 
    模板设置:
    普通标签默认开始标记是 {,结束标记是 }。也可以通过设置TMPL_L_DELIM和TMPL_R_DELIM进行更改。例如,我们在项目配置文件中定义: 'TMPL_L_DELIM'=>'
    <{', 'TMPL_R_DELIM'=>'}>',
    1.自定义路径自动加载:在配置文件中convention.php配置
    'APP_AUTOLOAD_PATH' =>'@.Common,@.Tool',
    2.加载第三方类库:如Think/Extend/Vendor/Mine/MyTest.class.php
    Vendor('Mine.MyTest','','.class.php');//后缀默认是.php,如果是.class.php需传
    第三个参数,第二个参数表示基本路径,空表示Think/Extend/Vendor/
    导入之后,先new一下类就可以使用类中的方法了,第三方类可以完全脱离Thinkphp
    框架而存在,不必遵循Thinkphp的命名规范,类的文件名可以是.php也可以是.class.php。
    3.M方法和D方法的区别
    ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,
    而 D方法 用于实例化一个用户定义模型类。
    M方法 和 D方法 都可以在模型类文件不存在的情况下直接使用的,但显然 M方法 更高效;
    但要使用模型类里面业务逻辑,就必须使用 D方法。
    注意:D('User'),表名的首字母要大写
    4.加载自定义配置文件my.php
    (1)在config.php文件中的这项加上自定义文件my.php的路径,以下是在同一目录下的情况:
      'LOAD_EXT_CONFIG' => 'my'
    (2)my.php中的内容:
    <?php return array( 'site' => 'zrptest.com' );
    
    
    
     
    时不我待,不负韶华!立刻行动!不吃学习的苦就会吃生活的苦!
  • 相关阅读:
    【分享】管理的最高境界是简单
    建立市场化风险评估机制推进地方政府信用评级建设
    手游-神雕侠侣 85侠客纪攻略(已通关)
    使用git的分支功能实现定制功能摘取与组合的想法
    组内正则培训记录
    组内Linq培训记录
    一次代码重构记录
    git代码库误操作还原记录
    关于代码重构的开始
    如何管理高手、大牛?
  • 原文地址:https://www.cnblogs.com/zrp2013/p/3567007.html
Copyright © 2020-2023  润新知