zoukankan      html  css  js  c++  java
  • thinkphp笔记

    thinkphp 笔记
    TP框架:
    1.模板引擎
    2.MVC设计模式
    3.常用操作类

    模板引擎和框架区别:
    1.模板引擎只是框架中用来做php和html分离的

    MVC设计模式:
    M 数据模型
    V 视图
    C 控制器

    V(HTML模板) --smarty()--》 C(PHP逻辑控制) -》M(Model类表操作)

    localhost/test/index.php/模块/操作
    localhost/test/index.php/Index/add

    目录结构
    ThinkPHP.php 框架入口文件
    Common 框架公共文件目录
    Conf 框架配置文件目录
    Lang 框架系统语言目录
    Lib 系统核心基类目录
    Tpl 系统模板目录
    Extend 框架扩展目录

    //入口文件定义 index.php
    define('APP_NAME',"Home");
    define('APP_PATH',"./Home/");
    define('APP_DEBUG',true);
    include "ThinkPHP/ThinkPHP.php";

    TP访问地址:
    http://localhost/test/index.php/Index/index
    TP访问地址参数:
    http://localhost/test/index.php/Index/index/id/10 pathinfo地址模式
    http://localhost/test/index.php/Index/index?id=10

    改变左右定界符 ThinkPHP/Conf/convention.php
    'TMPL_L_DELIM' => '<{',
    'TMPL_R_DELIM' => '}>',
    会被所有应用共享配置文件

    localhost/test/index.php/Index/index/
    __ROOT__ = /test
    __APP__ = /text/index.php
    __URL__ = /test/index.php/Index
    __ACTION__ = /test/index.php/Index/index
    __SELF__ =/test/index.php/Index/index/id/10
    __PUBLIC__ =/test/Public
    ../Public = /test/Home/Tpl/Public
    __TMPL__ =/test/Home/Tpl

    php中可以使用的路径常量:
    __ROOT__
    __APP__
    __URL__
    __ACTION__
    __SELF__

    模板中可以使用的路径模板替换:
    __ROOT__
    __APP__
    __URL__
    __ACTION__
    __SELF__
    __PUBLIC__
    ../Public
    __TMPL__

    注意:静态资源一定要用网站绝对路径

    C("DB_PORT")//直接获取配置文件里面的值

    //改变默认的地址模块:
    Home/Conf/config.php
    return array(
    'DEFAULT_MODULE'=>'User',
    );

    Home/Common/common.php
    写到他里面的函数,可以在本应用中所有模块的操作中使用

    包含扩展类:
    import("ORG.Util.Image");//包含ThinkPHP/Extend/Library/ORG/Util/Image.class.php

    _initialize()//初始化方法 登录权限把控的时候用
    //CommonAction.class.php
    专门建一个类 class CommonAction extends Action{
    function _initialize(){
    echo "权限把控";
    }
    }
    //LoginAction.class.php
    class LoginAction extends Action{
    function index(){
    echo "登录";
    }
    }
    //UserAction.class.php
    Class UserAction extends CommonAction{
    public function index(){
    echo "test";
    }
    }
    综上,只有login不继承commonaction,其他所有的类都继承commonaction,这样自动触发
    login 继承Action


    Thinkphp支持的四种URL模式
    1.普通模式
    http://localhost/test/index.php?m=Index&a=index
    2.pathinfo
    http://localhost/test/index.php/Index/index
    3.rewrite模式
    http://localhost/test/Index/index
    rewrite方式来访问模式和操作:
    1).apache必须支持mod_rewrite.so模块
    LoadModule rewrite_module modules/mod_rewrite.so
    2).www网站根目录支持解析rewrite重写表达式文件 .htaccess
    <Directory "C:/AppServ/www">
    Options Indexes FollowSymlinks ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
    </Directory>
    注意:options 不能出现Multiviews,AllowOverride 后必须写ALL

    3)..htaccess里面书写的rewrite表达式
    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME}% !-d
    RewriteCond %{REQUEST_FILENAME}% !-f
    RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
    </IfModule>
    4.兼容模式
    http://localhost/test/?s=Index/index

    a标签 不能用 href=__URL__/show
    要用:U(); a href="<{:U()}>/show"
    这种方式对网站的SEO优化最好
    U有三个参数 U("show","","html")第一个参数是模块/方法,第二个参数是传参,第三个参数是后缀,第四个是否跳转到那个页面
    一般跳转不用第四个参数 一般用$this->redirect();
    或者$this->success('yes',U('show'),5);//有倒计时的跳转
    $this->erroe('no',U('show'),5);

    如果要在模板中使用php函数,要在函数前面加冒号
    :time() :strtoupper()

    调试模式下 自定义报错页面
    Home/Conf/config.php
    'TMPL_EXCEPTION_FILE' => './Public/error.html',

    在操作中获取当前地址中的模块和方法
    1.$_GET[_URL_][0] 当前模块
    $_GET[_URL_][1] 当前方法
    2.MODULE_NAME 模块名
    ACTION_NAME 方法名

    常用常量:
    MODULE_NAME
    ACTION_NAME
    IS_GET
    IS_POST
    IS_AJAX
    __ROOT__ 网站根目录地址
    __APP__ 当前项目(入口文件)地址
    __GROUP__ 当前分组的URL地址
    __URL__ 当前模块的URL地址
    __ACTION__ 当前操作的URL地址
    __SELF__ 当前URL地址
    __INFO__ 当前的PATH_INFO字符串
    __EXT__ 当前URL地址的扩展名

    空模块
    EmptyAction.class.php
    空操作
    _empty()

    URL伪静态 省略index.php 地址后面的静态后缀
    'URL_HTML_SUFFIX' => 'html'
    URL路由
    URL重写
    URL生成

    跨模块调用:
    $test = A('user'); //user模块
    $test -> index(); //user模块下的index方法

    R('user/index') //user模块下的index方法 直接调用

    Thinkphp 数据库的add方法!!!!!!!!!!
    调用了htmlspecialchars 还有 mysql_escape_string //这块要自己测试!!! 否则插入得数据可能多一个反斜线
    例如 <b>aaa</b>"" => <b>aaa</b>\"\"
    如果不想这样 只需要修改DbMysql.class.php
    328行
    public function escapeString($str)
    {
    if(get_magic_quotes_gpc()){
    return $str;
    }
    if($this -> _linkID)
    {
    return mysql_real_escape_string($str,$str->_linkID);
    }
    else
    {
    return mysql_escape_string($str);
    }
    }

    AJAX
    $this -> ajaxReturn($arr,"aaa",'1')
    数据 信息 状态
    $.post(,function(rtn){
    //alert(rtn.data.username);
    var str = '';
    for(var i in rtn.data)
    {
    str += i+"=>"+rtn.data[i];
    }
    $("#main").html(str);
    })

    M方法是默认的Model类
    D方法是自定义Model类 如果没有就用系统的基类

    查看model类的sql语句
    echo $model->getLastSql();

    //设置model类在组合时真实的表名
    protected $tableName = 'user';

    //获取主键
    $user->getPk();

    $model->create();
    //生成model对象中的数据对象data,他可以智能过滤post表中字段不相符的下标
    //自动验证 UserModel类里 protected $_validate = array(); 出错的话用$user->getError(); 来获取错误
    if($user -> create())
    {
    $user -> add();
    }
    else
    {
    echo $user -> getError();
    }

    UserModel.class.php:
    protected $_validate = array(
    array('username','requite','用户名不能为空'),
    array('fcode','requite','验证码不能为空'),
    array('password','requite','密码不能为空'),
    array('repassword','password','两次密码不一致',2,'confirm'),
    array('fcode','checkCode','验证码有误',2,'callback'),
    );
    function checkCode($fcode)
    {
    if($fcode!=$_SESSION['scode'])
    {
    return false;
    }
    }
    protected $patchValidate = true;//新版支持数据的批量验证功能,只需要在模型类里面设置patchValidate属性为true( 默认为false),设置批处理验证后,getError() 方法返回的错误信息是一个数组
    //自动完成 UserModel类里 protected $_auto = array();
    //字段映射

    添加数据两种方法
    1.
    $_POST['username'] = 'user5';
    $_POST['password'] = '456';
    $_POST['regtime'] = time();
    $user = M('User');
    $user -> add($_POST);
    2.
    $_POST['username'] = 'user5';
    $_POST['password'] = '456';
    $_POST['submit'] = '提交';
    $user = M('User');
    $user -> create();
    $user -> regtime = time();
    $user -> add();


    curd操作
    insert: (add)
    1.$model -> add();//$model->add($_POST);
    2.$model -> create();
    $model -> add();

    update: (save)
    1.$user = D('User');
    $user->save($_POST);
    2.$user = D('User');
    $user -> create();
    $user -> save($_POST);
    select: (select)
    (find)
    $rows = $user -> select($id);//多个结果 二维数组
    $rows = $user -> find($id);//单个结果 一维数组
    $rows = $user -> where("id=$id") -> find();
    排序id $rows = $user -> where("id = $id") -> order('id') ->find();
    delete: (delete)
    $model -> delete($id);
    $model -> where("id = $id") -> delete();

    连贯操作

    mysql左连接
    一个用户表 成绩表
    user1 70
    user2 80
    user3 NULL
    user4 NULL
    要查所有人的成绩,缺考的补0 不能用select user.username,score.num from user,score where user.id = score.uid; //返回的只有user1 和user2
    要用左连接
    select user.username,if(score.num,score.num,0) from user left join score on user.id = score.uid

    left join on 后不能用and 要用where
    例如:select user.username,score.num from user left join score on user.id = score.uid where score.num is not null;

    模板布局
    {__CONTENT__} //替换为原来模板 现在模板是layout.html

    控制器关联模型
    用户表-user
    电话表-tel
    班级表-class

    IndexAction / index
    $user = D('User')
    $rows = $user -> relation('teltab') -> select();
    $rows = $user -> relation(true) -> select();//true全映射,false不映射
    //注意:中间的不是真实的表名而是映射的表名 -- mappingname

    UserModel:
    protected $_link=array(
    'mapping_type' => HAS_MANY,
    'class_name' => 'Tel',
    'foreign_key' => 'user_id',
    'mapping_name' => 'teltab',
    'mapping_fields' => 'code',
    )

    师徒:
    跨膜版 display(Test:show)
    $str = $this -> fetch('Test:index')

    模板引擎:
    $Think.now 时间 $think.const//define('HOST','a') 常亮
    调用函数
    <{$name|strtoupper}>

    <{$time|date='Y-m-d H:i:s',###}>//date("Y-m-d H:i:s",time())
    $this->time= time();

    模板for循环 else一定要加/

    include包含文件
    <include file='public:header'/>
    包含header.html
    $CIP = get_client_ip()//得到用户IP
    $ips = $IP -> getlocation($CIP)//知道用户在哪个区
    <import> 导入css,js

    模板继承

    快捷缓存(数据缓存) cache S
    if($!('rows'))
    {
    $user = M('User');
    $rows = $user -> select();
    S('rows',$rows);
    }
    $this -> rows = S('rows');
    $this -> display()
    静态缓存(模板缓存)
    'HTML_CACHE_ON' = true,
    'HTML_CACHE_RULES' = array(
    '*' => array('{:module}/{:action}'),//所有模板所有页面缓存
    '*' => array('{$_SERVER.REQUEST_URL|md5}') //等于上面
    )

    session支持:
    session('username','user1')
    session('login','1')
    session('isadmin','1')

    删除session三步:
    删除本地session数组
    删除服务器session文件
    删除客户端cookie
    session(null);
    session('[destroy]');
    cookie(session_name(),null);

    中文验证码:
    需要有字体支持
    字体文件放在ThinkPHP/Extend/Library/ORG/Util


    表单提交: //自动验证
    $user = D('user');
    if($user -> create()){
    $user -> add();
    }
    else
    {
    echo $user->getError();
    }

    水印函数:
    import('ORG.Util.Image');
    $img = new Image();
    $path = './Public/Uploads/Images/';
    $src = $path.'a.jpg';
    $dst = $path.'loao.png';
    $save = $path.'w_a.jpg';
    $img -> water($str,$dst,$save);

    图片缩放:
    thumb($image,$thumbname,$type='',$maxWidth=200,$maxHeight=50,$interlace=true);
    $img -> thumb;

    数据分页:
    $user = M('User');
    import('ORG.Util.Page');
    $count = $user -> count();
    $length = 3;
    $page = new Page($count,$length);
    $this->show = $page -> show();
    $this->rows = $user->order('id') -> limit($page -> firsRow,$length)->select();
    $page->setConfig("theme","总计%totalRow%个用户 %upPage% %%downPage");//这样可以自己定制格式

    文件上传:
    $up = new UploadFile();

  • 相关阅读:
    Mysql 数据库优化(五)sql语句优化【个人经验】转
    C# 编写的winform程序的托盘功能
    Mysql 数据库‘’函数‘、‘’事件‘’完成时间字段自动更新
    dd
    c# ‘using’三种用法
    集群、分布式、负载均衡
    iOS开发- Xcode 7添加pch文件
    iOS开发-pod install 出错 The dependency `AFNetworking (~> 2.6.0)` is not used in any concrete target.
    leetcode -- Find Median from Data Stream
    ubuntu14.04 LTS 更新源
  • 原文地址:https://www.cnblogs.com/Duskcl/p/5037552.html
Copyright © 2011-2022 走看看