Thinkphp学习笔记



Controller_name控制器名
ACTION_NAME    方法名
module_name    模块名


快捷函数


U()制作url地址的快捷函数


C(名称) 获得配置变量(convertion.php)
C(名称,值) 设置


L() 获得语言变量信息
E()给页面输出错误信息


A("模块/控制器")  实例化User控制器对象
A("Home/User")




get_defined_constants(true); true 分组显示


__CONTROLLER__  user自己定义的常量 直接写 无需{$Think.const.__Controller__}






跨控制器调用
Think.class.php  中有自动加载autoload()函数 


快捷函数  A("User") || A("模块/控制器") A("Home/User")


A("资源://模块/控制器")




R("User/login");  直接调用方法












返射
class  Peo{
  public  function  go(){
     return  'lets go';
  } 
  public function  want($k,$v){
     return '小名想要'.$v.'  但是他要先有'.$k;
  }
}


/**
$san = new Peo();
$do1 = new ReflectionMethod($san,'go');
echo  $do1->invoke($san);      //输出lets go
**/
$san = new Peo();
$do2 = new ReflectionMethod($san,'want');
echo  $do2->invokeargs($san,array('才华','美女')); //小名想要美女 但是他要先有才华






 'DB_FIELDS_CACHE'       =>  true,        // 启用字段缓存
  1 当为调试模式是,不起作用
  2  当为false时,不去作用 缓存在 Runtime\Data










$goods = new  \Model\GoodsModel();


Model\GoodsModel Object  实例化时为GoodsModel; 可以用GoodsModel中唯一的方法






在以前的版本中   D()与 直接new 一样,现在不行了
$goods = D('goods'); 实例化时为 父类 Model,只能用父类的方法
Think\Model Object




$goods = M('goods'); 实例化时为 父类 Model,只能用父类的方法
Think\Model Object


D()与M() 一样 都在函数库function.php文件






配置模板Smarty
  convertion.php
  Behavior行为配置变量信息(页面底部日志显示配置,smarty配置)
  T'TMPL_ENGINE_TYPE'      =>  'Smarty', 








DB.class.php
select distinct field from table join where group having order union comment


$obj = D()


$obj->select();//  执行查询  select("20,21,23,44")
  find(33)  返回一维数组




$obj->table(数据表);
$obj->where(参数);sql语句
group(字段);      分组
having(参数条件)   查询出的表再筛选
order()            排序
limit()            限制








具体方法  field()    where() limit()
 
__call调用  'order' 'having','group', Model.class




聚合函数sum avg 




add()  两种方式实现数据添加
   1 数组 $goods = D("goods"); 
                $arr = array(
               'goods_name'=>"苹果9",
                'goods_number'=>"11",
                'goods_price'=>"99999"
         );
     $rst = $goods->add($arr);  //方法返回最新添加的主键id
         var_dump($rst);
  


   2 AR方式
        ActiveRecord  活跃纪录


         一条纪录看做对象
         字段看做属性


        $goods = D("goods"); 
        $goods->goods_name='苹果';
        $goods->goods_number='33';
          
        $goods->add();数据添加  返回主键        








更新纪录
save()与add()类似
 1 数组中有goods_id之类的,自动把它传到where


 $goods->where("goods_id=44")->save();




 
删除delete(22)
   delete("22,33,44");
   where("goods_id=23")->delete();






   收集表单数据,
    __SELF__  action="" 自身
   
    $this->create() 收集post表单数据
    $this->add()


  success('添加商品信息',url);
  error()






原生sql  
 1 查询 query(); 返回一个二维数组


 2 添加,修改,删除 execute();返回受影响的行数




$_GET[]


  http://www.web.com/admin/goods/upd/name/wen/age/22
   
   网址和方法参数的顺序无影响  将
  function upd($name,$age){
    
        直接用$name,$age
    
   }
  
更新的action为__SELF__为带参数的有goods_id/22
无需隐藏域 在 $rst = $goods->save();


中加$goods->where->($goods_id)->save();
 


表单验证


表单通过create()方法收集数据
自定义model模型实现具体验证规则




$pathVaildate = true; 使所有报错一起出现




跳转success 由于模板是Smarty,所以在controller中
success 方法需要调整


将模板中的内容用 定界符 复制到方法中,再输出内容,最后exit;










命名空间 


namespace test1;
  $w = "不知道能输出";
function n(){
    
  return 'fengyuan这是t1的命名空间';
}




namespace test2;


$w = "不知道能输出";
function n(){
  return '这是t2的命名空间';
}




//echo test1\n();   //报错!!!调用的是test2\test1\n();这是相对定位;  


echo \test1\n();   //调用test\n(); 不报错 完全限定名称       


echo \test1\$w;       //不能输出




命名空间针对:  类,函数,常量作用






use 空间  (导入空间)


使用元素   (默认现在本空间内找,若没有再去use的空间)






4   1 没有使用namesppace定义空间,当前空间就是公共空间,
  例如一个有namespace的文件,引入(include)没有namespace的文件空间,
就是公共空间.在namespace文件里边可以通过  斜杠(\)  直接访问公共空间元素
     
    2当前没有空间,引入文件有空间,默认就是当前空间


  命名空间的第一个namespace声明前面不能有任何代码


使程序严谨,公共命名空间的元素都用 \斜杠 访问




空间引入 use  ; 起别名 as 










tp框架对多语言的支持


  1 多语言通过Behavior支持


  语言包一共有四种, 后定义的会覆盖前面的


1 L()快捷函数,可以获得全部的语言变量
2 当为Smarty模板时,使用assign('lang',L()); 传递变量值




验证码
1  Think/library/Think/Verify.class.php
$varify = new 命名空间 verify();
$verify->entry(); 生成验证码


οnclick="javascript:this.src='{$smarty.const.__CONTROLLER__}/ver?tm='+Math.random()"




<a style="color: #fff"                                   οnclick="if (confirm('确定要退出吗?')) return true; else return false;" 
                                                        href="{$smarty.const.__MODULE__}/Manager/login" target=_top>退出系统</a>   </td>


target 是关键




1    tp框架使用自定义功能类


在项目目录下面 建立Component的目录,文件的命名空间为Component;


自定义的分页类
  $total = $goods->count();
 $per   =9;
  $page = new \Component\Page($total,$per);


   $sql = 'select * from sw_goods a left join sw_category b on a.goods_category_id = b.cat_id order by goods_id desc  '.$page->limit;


    $info = $goods->query($sql);
          
   $pagelist = $page->fpage(); 
  $this->assign('pagelist',$pagelist);




缓存用


文件缓存:


内存:


数据库:




S(name,value)设置缓存信息
S(name);
S(name,null);




缓存方法1:外部用户访问的方法


 方法2:被其他方法调用的方法,获得指定数据








//文件上传


if(!empty($_FILES)){
   
            $config = array(
                 
                 'rootPath'  =>     './Public',
                 'savePath'   =>    '/Upload/',
                 'saveName'   =>    array('uniqid',''),
             );
     


      $upload = new \Think\Upload($config);// 实例化上传类   


      $info   =   $upload->uploadOne($_FILES['goods_big_img']); 
      if(!$info) {
          // 上传错误提示错误信息   
        echo $upload->getError(); 
      
     }else{
     // 上传成功 获取上传文件信息    
        $goods_img =  $info['savepath'].$info['savename'];
        $_POST['goods_big_img']=$goods_img;
      }
     }
   $goods->create();
             $rst = $goods->add();




//图片缩略图






 //制作缩略图


        $small = new \Think\Image();
        //找到大图位置,并打开
        $small->open($upload->rootPath.$goods_img);
        
        $smallimg = $info['savepath'].'small_'.$info['savename'];
        //实施缩略
        $small->thumb(150,150)->save($upload->rootPath.$smallimg);
        $_POST['goods_small_img'] = $smallimg;














权限管理
auth_id
auth_name
auth_pid
auth_c
auth_a
auth_path
auth_level




--权限表
CREATE TABLE `sw_auth` (
  `auth_id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
  `auth_name` varchar(20) NOT NULL COMMENT '名称',
  `auth_pid` smallint(6) unsigned NOT NULL COMMENT '父id',
  `auth_c` varchar(32) NOT NULL DEFAULT '' COMMENT '控制器',
    controller控制器 Goods


  `auth_a` varchar(32) NOT NULL DEFAULT '' COMMENT '操作方法',
  
action  方法 showlist


  `auth_path` varchar(32) NOT NULL COMMENT '全路径',
  全路径:用户信息排序使用
  ① : 如果是顶级权限,全路径等于本记录主键值
  ② :如果不是顶级权限,全路径等于 "父级全路径-(中恒线)本记录主键值"


  `auth_level` tinyint(4) NOT NULL DEFAULT '0' COMMENT '级别',
  基本:0顶级权限  1次顶级权限  2次次顶级
  
权限呈现缩进关系使用


  PRIMARY KEY (`auth_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8


权限数据模拟:
insert into sw_auth values (1,'商品管理',0,'','',1,0);
insert into sw_auth values (2,'订单管理',0,'','',2,0);
insert into sw_auth values (3,'广告管理',0,'','',3,0);
insert into sw_auth values (4,'商品列表',1,'Goods','showlist',"1-4",1);
insert into sw_auth values (5,'添加商品',1,'Goods','add',"1-5",1);
insert into sw_auth values (6,'商品分类',1,'Goods','cate',"1-6",1);
insert into sw_auth values (7,'用户评论',1,'User','comment',"1-7",1);
insert into sw_auth values (8,'订单列表',2,'Order','showlist',"2-8",1);
insert into sw_auth values (9,'订单打印',2,'Order','print',"2-9",1);
insert into sw_auth values (10,'添加订单',2,'Order','add',"2-10",1);
insert into sw_auth values (11,'广告列表',3,'Advert','showlist',"3-11",1);
insert into sw_auth values (12,'广告位置',3,'Advert','position',"3-12",1);








  1 用户登录显示权限信息 $_SESSION['mg_id'] 用户id;
  2 根据session信息获得 角色 role_id信息
  3根据角色id信息获得权限列表ids信息


  4 根据权限ids信息差查询具体权限信息,进而显示








父级和子级权限


{foreach  $p_info as $k=>$v}  //父级
     {foreach $s_info as $vv}
         
             {if($vv.auth_pid ==$k)}


               {$vv.auth_name}
                     //子级
              {/if}
     {/foreach}
     
{/foreach}










{foreach $pinfo as $k=>$v}


foreach $ainfo as $vv}
   {if $vv.auth_pid == $v.auth_id}


               {/if}
               {/foreach}


                     </table>


   {/foreach}                   
                
   给普通控制器定义父类 Component/AdminController.class.php


   所有普通控制继承他,  父类再去继承Controller


   Admincontroller.class.php


   function __contruct()


   function _empty(){}  定义空的控制器


   function success 重写调转页面   


select role_auth_ac from sw_role r left join sw_manager m where r.role_id = m.mg_role_id where m.mg_id = 2;

















































































































































































































































































































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值