ThinkPHP简介

1、常见PHP框架

    Laravel:国外的,非常有名,功能齐全,学习难度大,可以写出间接优雅的代码
    ThinkPHP:国内的PHP框架,具有简单,快速,兼容等优点,之前手工打造玩具框架(TP3.2)
    Yaf:鸟哥开发的,是用C语言开发的,效率极高
    Yii:最有效率的PHP框架之一,百度的很多业务模块都是使用这个框架
    总结:没有最好的框架,只有最适合的框架

2、ThinkPHP(5.0)

    官网:http://www.thinkphp.cn/
    手册:快速入门,完全开发
    下载:官网、Composer、Git
    目录结构:
        public:公共的静态文件目录
            index.php    唯一的入口文件
        application:应用程序目录
            model、view、controller
    运行环境:
        1、PHP >= 5.4.0(完美支持PHP7)
        2、扩展库:PDO、MBString、CURL
    配置虚拟主机:
        1、右键点击WAMP,选择Wamp Setting
        2、勾选VirtualHost sub-menu
        3、访问localhost,点击Add a virtual host,按照提示添加
        4、重启WAMP服务

3、基本使用

    1、访问指定模块指定控制器的指定方法
        http://域名/index.php?s=模块/控制器/方法

    2、不传参数,默认访问index模块,index控制器,index方法

    3、因为有.htaccess文件的存在,可以省略[index.php?s=],简写为
        http://域名/模块/控制器/方法

    4、访问带参数的函数 test($a,$b)
        http://域名//模块/控制器/方法/a/2/b/4
        若配置:url_param_type = 1,则可简写(顺序解析)为
        http://域名//模块/控制器/方法/2/4

    5、添加一个控制器
        在controller目录创建一个文件,访问时默认开启了自动转换
        当控制器有多个单词组成时,需要通过'_'进行分割
        如:UserType控制器,访问时:user_type
        若不想让其自动转换,可以设置:url_convert = false

    6、添加模块admin
        同原有的index模块,需要在application目录创建一个文件夹
        注意:命名空间要这样写 app\模块\controller

    7、调试模式
        app_debug = true 开启调试,在测试时
        app_debug = false 关闭调试,在上线时

4、请求(Request)

    创建方式:

        1、Request::instance()    是单例对象
        2、继承自think\Controller类,有一个成员变量request
        3、public function req(Request $request)  依赖注入(推荐使用)
        4、助手函数:request()

    获取URL相关信息:
        url/domain/pathinfo

    获取模块/控制器/方法
        module()
        controller()
        action()

    获取请求相关参数
        method()

    获取所有请求参数
        param()    获取所有
        only(['name'])    获取指定名字name的参数
        except(['name'])    获取除name之外的参数

    参数检测
        has('参数名','方法')
        input('?get.id');    判断get请求是否有id参数

    获取分配参数
        get('name','默认值','过滤方法1,方法2')
        说明:若想全局过滤,修改配置文件中的default_filter选项

    请求伪装:
        <form method='post'>
            <input type='hidden' name='_method' value='PUT'>
        </form>
        说明:通过var_method可以指定名称

    请求头信息
        header() 获取所有头信息(一个数组)
        header('user-agent')    获取指定头信息

    伪静态:
        设置:url_html_suffix = 'html|php|shtml'
        作用:为了更好满足SEO

5、数据库(Db)

    修改配置:application/database.php
    使用Db类:think\Db
    原生操作:
        查询:Db::query()
        执行:Db::execute()
    参数绑定:类似于PDO
        Db::query('select * from think_data where id=?',['1'])
        Db::query('select * from think_data where id=:id',['id'=>'1'])
    查询构造器:
        table()    指定表名(要写全),要求带前缀
        name()    指定表名,不带前缀,推荐使用
        insert()
        delete()
        update()
        select()
        where()
    链式操作:
        你能够想到所有操作
    事务处理
        Db::transaction(function(){/*事务处理操作*/});
        Db::startTrans();
        try {
            //事务处理
            Db::commit();
        } catch(Exception $e) {
            Db::rollback();
        }

6、查询语言
    select:查询所有符合条件的记录
    find:返回一条符合条件的记录
    where(字段名,表达式,指)
    闭包查询:Db::select(function($query){/*构造查询条件*/});
    value('字段'):获取一条记录指定的字段值
    column('字段'):获取所有记录指定的字段
    chunk(每次处理条数,闭包处理)
        1、数据量过大,没办法一次性读取并处理
        2、闭包处理中返回false即可结束查询
    insertGetId:插入数据并返回自增的ID
    getLastInsId:可以单独获取一次最后插入数据的ID
    insertAll:插入多条数据
    setField:更新某个字段
    setInc:增加指定字段
    setDec:减少指定字段
    delete:可以根据指定的主键删除记录(可以删除多条)
    聚合查询:count/max/min/sum/avg
    whereTime:专门用于时间查询
    子查询:只构造SQL语句,但是不执行,也可以用于SQL调试
        1、select(false)
        2、fetchSql(true)
        3、buildSql()
        注意:1和2的方式没有小括号

7、模型和关联
    1、创建一个Model类
        use think\Model
        class User extends Model {}
        初始化操作重写:initialize()
    2、指定表名
        protected $table = '带前缀的表名';
        protected $name = '不带前缀的表名';
    3、常见操作相关函数
        新增:
            save
            saveAll
            create
            isUpdate(false)->save()
        查询:
            get(主键号),获取记录,得到的是对象,可以通过成员变量的访问方式获取字段值
            toArray:将对象转换为数组
            all:获取所有
            getByXxx:xxx为指定的属性
        修改:
            先get()
            再save()
            update($data)
        删除:
            delete
            destory(主键)
    4、获取器和修改器
        getXxxAttr
        setXxxAttr
        说明:
            1、Xxx表示将表中的字段转换大驼峰的书写形式
            2、getData('属性')获取原始数据
            3、类的内部获取属性使用:getAttr('属性')
    5、自动写入时间戳
        1、全局配置
            auto_timestamp = true
            默认的create_time和update_time字段的类型为int
        2、Model类内指定字段名
            protected $createTime = 'xx';
            protected $updateTime = 'xx';
        3、内部开启关闭字段写入
            整体操作:protected $autoWriteTimestamp = false;
            单个控制:protected $createTime和protected $updateTime
    6、软删除
        1、删除只会修改指定的字段(delete_time)
        2、查询是不会显示,需要使用withTrashed()
        3、只查看已经软删除的数据onlyTrashed()
    7、自动完成
        insert和update属性可以指定在插入和更新操作时将默认的指写入或更新
    8、模型关联(听不懂没关系,大不了多查几次)
        一对一关联:(一个用户拥有一组详细信息)
            主表模型
            public function 关联表名
            {
                return $this->hasOne('关联表名','关联外键');
            }
            附表模型
            public function 关联表名
            {
                return $this->belongsTo('关联表名','关联外键');
            }
        一对多关联:(一个用户发表多篇文章)
            主表模型
            public function 关联表名
            {
                return $this->hasMany('关联表名','关联外键');
            }
            附表模型
            public function 关联表名
            {
                return $this->belongsTo('关联表名','关联外键');
            }
        多对多关联
            public function 关联表名
            {
                return $this->belongsToMany('关联表名','中间表');
            }
    9、模型分层
        数据层:负责数据的存取
        逻辑层:处理相关的业务逻辑
        服务层:负责多个业务逻辑才能完成的功能
        \think\Loader::model('User');
        \think\Loader::model('User','logic');
        \think\Loader::model('User','service');
8、视图
    fetch:渲染模板文件
        1、默认定位规则:模块/view/控制器(小写+下划线)/方法(小写).html
        2、'abc',渲染:模块/view/控制器(小写+下划线)/abc.html
        3、admin@hello/world  admin/view/hello/world.html
        4、传递一个模板文件的全路径(带后缀.hmtl),路径相对于index.php
        5、参数介绍
            参数1:模板文件位置
            参数2:以数组形式分配变量
            参数3:模板文件中的字符串替换
        6、全局字符串替换,修改view_replace_str
    assign:分配变量
        1、可以传递两个参数,分别作为名称和指
        2、可以传递一个参数(数组),以键值对形式
9、模板
    变量输出:
        标量:{$var}
        数组:{$data.name}或者{$data['name']}
        对象:{$obj->name}或者{$data:name}
        系统:已$Think开头的方式访问,无需分配
        常量:{$Think.const.APP_PATH}或{$Think.APP_PATH}
        配置:{$Think.config.xxx}
        请求:{$Request.get.name}
    使用函数:
        1、使用'|'表示
        2、###表示占位,作为函数的第一个参数可以不用写
        3、=后跟函数的参数,多个需要用逗号隔开
    使用默认值:
        格式:{$var|default="默认值"}
        说明:分配变量使用分配的,没有分配使用默认值
    原样输出:
        {literal}
            Hello,{$name}!
        {/literal}
    模板布局:
        使用场景:适合于一个网站的页面头尾相同,只有中间内容不同的时候
        使用方式:
            1、全局配置
                'layout_on'    => true,            全局开关
                'layout_name'  => 'layout',        模板文件
                'layout_item'  => '{__REP__}',    替换内容
                若某个文件不要模板布局:{__NOLAYOUT__}
            2、单个指定
                1、无需开启全局配置
                2、需要的模板文件开头添加{layout name="layout" /}
            3、动态控制模板布局
                开启:$this->view->engine->layout(true);
                关闭:$this->view->engine->layout(false);
                指定:$this->view->engine->layout(layout/xxx);
    模板继承:
        基础模板(base.html)中使用{block name="xxx"}{/block}
        子模板中:
            {extend name="base"}
            可以重写基础模板中的block,具体删除、修改
    循环输出:{volist}
        name:指定分配过来的数据变量名
        id:指定遍历操作中的每一个value
        key:指定遍历的序号,默认为$i
        $key:表示遍历中的键
    原生PHP
        {php}写php代码{/php}

10、跳转
    成功:
        函数:$this->success(); 
        文件:dispatch_success_tmpl指定
    失败:
        函数:$this->error();
        文件:dispatch_error_tmpl指定
    重定向:
        函数:$this->redirect()

11、日志记录
    \think\Log::record()    手动写入自定义信息,不会立即写入文件,等请求结束自动写入
    \think\Log::write()        手动写入自定义信息,立即写入文件
    \think\Log::save()        手动写入内存信息,立即写入文件

12、错误及调试
    全局开关:app_debug
    trace开关:app_trace,会在右下角出现小图标
        设置显示模式为console后更加隐蔽,非常适合热修改
    404页面定制:
        'http_exception_template' => [
            // 定义404错误的重定向页面地址
            404 => '404.html',
            // 还可以定义其它的HTTP status
            401 => '401.html',
        ]
        说明:
            1、错误页面的位置是相对于入口文件的
            2、生效必须在部署模式下

13、验证
    独立验证:
        使用 \think\Validate类完成,需要制定验证规则及数据
    验证器:(自定义一个验证类)
        1、有自己的命名空间:app\index\validate
        2、需要继承自 think\Validate类
    自定义验证规则:
        protected function checkNum($value, $rule, $data)
        参数说明:1:验证的字段值,2:规则明,3:所有验证数据的数组

    助手函数:validate()

14、杂项
    session:
        设置:Session::set(key, value)
        获取:Session::get(key)
        删除:Session::delete(key)
        取值后删除:Session::pull(key)
        清空:Session::clear()
        助手函数:
            设置:session(key,value)
            获取:session(key)
            检测:session(?key)
            删除:session(key,null)
            清空:session(null)
    cookie:
        用法同session基本一致
    分页:think\Paginate
    文件上传:
        获取上传信息:file()
        移动上传文件:move()
        获取文件扩展名:getExtension
        获取路径名:getSaveName
        获取文件名:getFileName
        获取错误信息:getError
        验证:validate()
        指定规则:rule()
    验证码:
        生成:
            <div>{:captcha_img()}</div>
            <div><img src="{:captcha_src()}" alt="captcha" /></div>
        验证:
            $this->validate([])
            captcha_check(验证码)
    图像处理:
        根据功能查找函数

15、路由(通过特定的格式确定访问的资源文件)
    路由模式:
        普通模式:
            url_route_on = false
            默认采用pathinfo的方式
        混合模式:(默认)
            url_route_on = true
            url_route_must = false
        强制模式:
            url_route_on = true
            url_route_must = true
    路由定义:
        Route::rule('xxx', 'index/index/luyou','get');
    资源路由:
        restful风格:使用同一URL,能够根据请求方法类型完成不同方法的调用
    域名路由:
        开关:url_domain_deploy = true
        添加域名解析:admin.tp5.com同样解析到public目录
        Route::domain('admin','admin');
        www.tp5.com/admin/index/index => admin.tp5.com/index/index
    URL生成:
        /模块/控制器/方法 + 参数
        Url::build(路由信息,参数);
        url(路由信息,参数);
        <a href="{:url(路由信息,参数)}">













  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值