首页 > 代码库 > 3.2版本视频讲解知识点

3.2版本视频讲解知识点

第一天**********************************************************
 
【介绍】
ThinkPHP框架:简称tp框架。
真实项目开发步骤:
1.多人同时开发,协作开发项目、分工合理、效率有提高。(原因:代码风格不一样、分工不好)。
2.测试阶段
3.上线运行
4.对项目进行维护、修改、升级(单个人维护项目,十分困难,代码风格不一样)
5.项目稳定的运行阶段
6.项目停止运行(旧项目的人员已经全部离职、新人开发新项目)
 
运用框架的原因:   

在项目开发中,一些架构和代码都是重复的,为了避免重复劳动,于是各种各样的框架诞生了。

在PHP开发中,选择合适的框架有助于加快软件开发,节约宝贵的项目时间,让开发者专注于功能的实现上。由于流行的框架经过了大量项目的检验,所以使用框架还有助于创建更加稳定和安全的应用程序。

 
 
问题:
1.多人开发项目,分工不合理(html,php,myslq)
2.代码风格不一样,后期维护十分困难
3.项目生命周期十分短。
4.项目不能很好地适应客户需求,牵一发而动全身。
 
其他相关框架
1.zendframework zendphp语言公司发布的官方框架,重量级(功能多)。
2.yii(读作:外哎)美国华人开发的框架,xue qiang,qiang,重量级框架,面向对象框架(纯OOP框架)
3.CI CodeIgniter 轻量级框架
4.cakephp    外国框架,重量级,速度慢
5.symfony    外国重量级框架。
6.ThinkPHP 轻量级框架,国人框架,入门快。
 
什么是框架:
        一堆代码的集合,里边有变量、函数、类、常量、,里边也有许多设计模式MVC、AR数据库、单例等等。
        框架可以节省我们50%-60%的工作量,我们全部精力都集中在业务层面。
为什么使用框架:
         1.框架可以帮助我们快速,稳定、高效搭建程序系统
         2.该系统由于框架的使用使得本身的维护性,灵活性、适应客户需求方面得到最大化的增强。
         3.使用框架的过程中可以使我们的注意力全部集中业务层面,而无需关心程序的底层框架。
【框架目录文件介绍】
3.2版本已经成熟了。不断有功能在扩展。
index.php:入口文件
Public:放静态资源的,公共的目录。像html和css
Application:当前的应用目录。
ThinkPHP:
       目录: Common:核心函数库放在里面:
                                            build.php:
                                            functions.php:
                  Conf:框架里面的配置
                                            convation.php:最基本配置文件,不能修改。
                                            debug.php:
                  Lang:语言包,框架支持哪些语言
                  Library:资源库,非常重要,tp框架中的许多信息都可在其中找到。
                                            Behavior:系统的行为目录
                                            Org:可以使用到的共鞥类库
                                            Think:   最核心的东西
                                                       常用的:App.class.php和Think.class.php。
                                                                   Image.Class.php::生成验证码、缩略图、水印
                                                                   DB.class.php:数据库
                                                                   Log.class.php:记录日志
                                                                   Model.class.php:数据模型的父类。
                                                                  Page.class.php:做数据分页的
                                                                  Storage.class.php:运行时生成文件存储的。
                                                                   Upload.class.php:上传文件的
                                                                   View.class.php:生成视图的。
                                            Vendor:小商店,模板的类文件目录。
                  Tpl:有几个静态的模板(html页面),四个到五个,公共的,
        文件:ThinkPHP.php:框架的核心程序,每个框架在使用的时候都需要引入它。
【创建应用】
shop 商城项目
book 图书管理系统
car 汽车销售系统,
三个项目可以使用一个公共的tp框架。
        :
 
 
 
步骤:
1.创建一个入口文件:index.php
2.项目自动创建目录。(创建一个虚拟主机)
Common:当前项目个性函数库
Conf:配置目录。
Controller:控制器
Model:model模板
View:视图目录。
 
3.访问入口文件的同时系统会自动把对应的文件创建出来。
    
Common、Home、Runtime为系统自动创建。
 
【控制器和方法创建】
主流的额设计模式:mvc模式。
入口文件?m=模块&c=控制器&a= 控制器里的方法
 
访问:
【路由解析】
一。通过url地址get参数找到指定控制器并进行对应方法请求
    http://index.php?m=模块名称&c=控制器&a=操作方法:
以上url地址信息代码不够优雅、不安全。这种方法太直白了
 
二。tp框架url地址可以由以下四种
    1.http://网址/index.php?m=XX&c=XX&a=XX                基本模式、get模式
    2.http://网址/index.php/模块/控制器/操作方法                路径模式pathinfo
    3..http://模块/控制器/操作方法                                        rewrite重写模式
    4..http://网址/index.php?s=/模块/控制器/操作方法        兼容模式
 
三。具体url地址模式设置在配置文件: ThinkPHP/Conf/Convention.php
             ‘URL_MODEL‘ => 1, // URL访问模式,可选参数0、1、2、3,代表以下四种模式:
             // 0 (普通模式); 1 (PATHINFO 模式); 2 (REWRITE 模式); 3 (兼容模式) 默认为PATHINFO 模式
    如果要修改,不能直接在该文件中修改。可在模块中/conf/config.php中修改。
    
config.php是我们当前自己项目的配置文件,我们可以通过该文件达到配置变量的目录。这个文件在系统运行过程汇总会覆盖convention.php的配置变量。
include “convention.php”;
include "config.php";
后引入的文件要把先引入的文件配置变量覆盖掉。
 
我们系统有兼容4中url地址模式的使用。
系统有的时候,会自动创建url地址,他会根据当前模式进行url地址创建使用。
U():创建url地址。
 
四。在入口文件index.php调整当前模式为开发调试模式
    //把目前tp模式又生成模式变为开发调试模式
     define("APP_DEBUG", true);//会将Runtim/common-runtime.php删除掉
 
1.我们学习到了配置变量(核心配置变量conversion.php、当前应用配置变量confin.php)
2.快捷函数U("模块/控制器/方法")   根据参数和(url模式)创建对应的url地址
3.把框架的模式调整为开发调试模式。
 
【开发和生成模式】
 1.开发调试模式:系统需要加载26个文件。    index.php  define("APP_DEBUG", true)
    生产模式:系统只需要加载很少的文件。    index.php  define("APP_DEBUG", false)
                    节省了许多文件的开发、关闭的系统开销,节省资源。
    怎么知道数量:
            观察系统运行过程中生成的日志信息:
                    1.做变量配置,convention.php, config.php
                    2.tp框架配置变量:convention.php Behavior行为文件 程序灵活设置
                    Behavior  行为:ThinkPHP/Library/Behavior/ShowPageTraceBehavior.php:显示页面追踪信息
                    $options里边的信息时可以直接通过config.php进行修改的。
                     //让页面显示追踪日志信息
                      ‘SHOW_PAGE_TRACE‘ => true,
                    成功时,页面右下脚,单击它可打开
                                                                                                        
 
                    将“文件加载”中的所有文件 在一起了,在common~runtime.php
【控制器调用视图View模板】
1.
APP_DEBUG=true;调试模式错误信息显示更详细。
 
2.
控制器和模板的关系:在view目录都会有一个与控制器标志一样的目录,里面有具体模板文件。
例如:GoodsController.class.php控制在view目录有Goods目录,里边都是Goods控制器对应的模板文件。
【视图模板与框架整合】
1.引入静态代码
2.引入css、image、js
    a).以上3样东西,浏览器需要发送单独的http请求。
        
    b)。引入css的时候,一User控制器标志作为当前目录,显然不行。
 
 <link href="http://localhost/1116/shop/public/css/style.css" rel="stylesheet" type="text/css" />以上目录设置不利于后期维护,例如其中的目录有修改,就需要全部都修改,有很多重复劳动。
    优化后:利用常量把路径定义好,后期只维护一个常量即可。
     //定义css、img、js常量
 define("SITE_URL", "http://localhost/1116/");
 define("CSS_URL",SITE_URL,"shop/public/css/");
 define("IMG_URL",SITE_URL,"shop/public/img/");
 define("JS_URL",SITE_URL,"shop/public/js/");
tp框架默认引擎的使用: <link href="http://www.mamicode.com/{$Think.const.CSS_URL}style.css" rel="stylesheet" type="text/css" />
 
3.模板与tp模板整合
    1.引入静态代码
    2.引入css、img、js文件
    3.在入口文件地方把css、img、js的路径设置常量
    4.在模板汇中通过常量获得具体的css、img等文件信息(后期重复的一段代码。)
    5.把css样式文件本身的图片路径设置正确(获得图片的相对位置是本身自己css文件)
 
【URL地址大小写】
1.在config.php里边url大小写敏感
    // 默认false 表示URL区分大小写 true则表示不区分大小写
     ‘URL_CASE_INSENSITIVE‘ => true,   
2.引入文件:include “hello.php”;              include "Hello.php";实际都会把指定的文件找到。
    tp框架本身自己做了额外设置:include “hello.php”;              include "Hello.php";表示引入两个不同文件。
【空操作和空控制器使用】
1.空操作:操作方法不存在。
    空控制器:没有指定控制器。
    http://网址/index.php/Home/User/login
    http://网址/index.php/Home/User/hello    空操作                                        
    http://网址/index.php/Home/beijing/login    空控制器
    eg:空操作:
    
    一般网站处于安全考虑不给用户提示任何错误信息。
    空操作本质意思:一个对象(控制器)调用本身不存在的方法。
    在OOP里,对象调用本身不存在方法,处于用户体验比较好的角度考虑,我们可以在类里边制作一个魔术方法: 
           function __call();
            //避免该方法被重复在各个控制器中书写,可以把该该访问放在父类里
              function __call($m,$arg){  }
            普通控制器父类的位置:
                                        
 
3.U():制作url地址的快捷函数
    C(名称):获得配置变量(convention.php、config.php)信息  
    C(名称,值)    设置配置变量信息。
    L():获得语言变量信息。
    E():给页面输出错误信息。
    A(“模块/控制器”):实例化控制器对象。eg:A("Home/User"):实例化User控制器对象。
            3.2版本:也可实例化其他项目的控制器对象。A("book://Home/User"):实例化book项目User控制器对象。
4.     
空操作有两种解决方案:
            1.在对应的控制器里边制作一个方法,名称为“_empty”,这个控制器的空操作都会自动执行该方法(推荐使用)。
            2.给空操作的名称制作一个同名的模板出来,系统会自动调用。
5.空控制器
      1. http://网址/index.php/Home/tianjin/login,其中,无tianjin
        
        2.空控制器:在实例化控制器对象的时候,没有找到指定的类。
            什么时候实例化控制器对象:ThinkPHP/Library/Think/App.class.php
            熟记文件:
                            index.php:入口文件
                            ThinkPHP/ThinkPHP.php:框架核心文件
                            ThinkPHP/Library/Think/Think.class.php:框架核心文件
                            ThinkPHP/Library/Think/App.class.php:框架应用文件。内部包括控制器对象创建,以及对象调用指定的方法呈                                                                                    
现内容。
        3.
          空控制器解决方案:可以再做一个控制器,名称EmptyContrller.class.php。在该控制器内部其实只需制作一个_empty()方法即可。
 
【项目分组设置】
1.系统有前台用户操作界面
系统还有后台共公司内部人员使用维护平台
两者在使用的过程中就是对”控制器“、”视图模板“、”model模型“的操作。
2. 为了系统开发方便,及代码部署更加合理,我们的控制、view视图、等前后台文件不要混在一起,要在物理结构上分开。
3.
4.访问前台:http://网址/index.php/Home/控制器/操作方法    访问Home分组的控制器和操作方法
后台:http://网址/index.php/Admin/控制器/操作方法             访问Admin分组的控制器和操作方法
【后台登录页面搭建】
1.控制器
        ManagerController.class.php
        function.login()
为后台静态资源目录创建常量
 
【后台首页品字形框架搭建】
1.
 
 

【数据修改具体实现】

1.通过路由给一个操作方法传递参数

    http://网址/index.php/模块/控制器/方法upd/变量名1/值/变量名2/值/变量名3/值 

    以上路由是通过get形式给指定的操作传递了三个参数信息

    原则三个参数信息接收的时候通过$_GET接收即可

    例如:$_GET[‘变量名1’];   include()

 

    以上参数信息接收太直白,不安全,需要按照框架规则使用下边的方式接收get参数信息

    http://网址/index.php/Admin/Goods/upd/name/tom/age/25/addr/beijing

    function upd($name,$age,$addr){

        $name;

        $age;

        $addr;

    }

    以上参数表述,如果在请求的时候没有按照规则传递参数,那么当前方法禁止访问。

    (除非参数有默认值) 

2.修改商品信息步骤:

    1. 在“修改”按钮处把被修改商品id信息通过get形式传递给upd操作

    2. 在upd方法里边制作形式参数$goods_id,接收服务器给传递的get变量goods_id

    3. 在修改表单里边制作隐藏域goods_id,避免tp框架禁止修改语句执行

    4. 在upd操作方法内部有两个逻辑:展现表单、收集表单

【表单验证】

1.方式:javascript、jquery  、在服务器端通过tp框架实现表单验证

2.要验证的表单:用户名、密码、重复密码、邮箱、qq、手机号码、爱好、学历

3.具体步骤:

    1. 制作表单

    2. 表单form数据通过create()方法收集(验证功能要求我们必须通过create()方法收集数据)

    3. 自定义数据model模型类实现具体验证规则

注意:

    1.一次性获得全部验证错误

    2.为同一个项目设置多个验证。

    3.如果出错,显示提示:

                如:邮箱:格式不正确。

                      qq:都是数字的,长度5-10位,首位不为0。---正则:/^[1-9]\d{4,9}$/。qq格式不正确

                      手机:

                     性别不用验证,默认有一个选项

                    学历必须选择一个(下拉框):

                     爱好:复选框(至少选择一项)

    4.数组--元素的个数

    5.这些基础知识到任何时候都用得到。

 

【内容回顾】

1. 3种实例化model模型方法

    a) new  命名空间GoodsModel();

    b) D([“模型标志Goods”])   (之前版本会实例化自定义model对象,目前都实例化Model基类对象)

        i. 没有参数实例化一个Model对象、有参数也实例化一个Model对象操作goods数据表

    c) M([“模型标志Goods”])

        i. 没有参数实例化一个Model对象、有参数也实例化一个Model对象操作goods数据表

2. 数据库查询及连贯操作查询

    a) select()

    b) select(10)  主键值等于10的记录

    c) select(“20,21,22”)  主键值  in  20,21,22 的三条记录

    d) find(4)  主键值等于4的记录

    e) select()方法返回二维数组,find方法返回一维数组

    f) 连贯操作查询方法:

    g) field()  where()  limit()  父类Model已经定义好的方法

    h) table()  group()  order()  group()  having() 统一在魔术方法__call()里边声明

    i) 以上方法可以连续操作执行,使用没有顺序要求

    j) $obj -> limit(5)->where(‘price>100’)->order(‘id desc’)->select();

3. 聚合函数使用

    a) count()  sum()  max()  min()  avg()

    b) 以上方法也是在Model的魔术方法__call()里边定义

4. 添加数据记录add()

    a) 两种方式:数组、AR操作

5. 修改数据信息save

    a) 两种方式:数组、AR操作

    b) 注意:为了修改成功必须有两个条件之一被设置

        i. 信息里边有主键值id值被修改

        ii. 可以通过where设置具体哪些记录被修改

6. 删除数据delete

    a) $goods -> delete(10)  主键值等于10的记录信息

    b) $goods -> delete(“10,12,13”)  删除三条记录主键值 in  10,12,13 -------------字符串

    c) $goods -> where(‘id>100’)->delete()  id>100的记录都被删除-------------where条件

7. 原生sql语句执行

    a) query()  执行查询语句,返回二维数组信息

    b) execute()  执行增加、修改、删除,返回受影响的记录数目,返回false表示sql语句有错误,返回0表示sql语句        执行前后对数据没有改变

8. 表单验证

    a) 在自定义模型里边重写$_validate

    b) $_validate属性定义时一个数组信息,内部每个小的单元还是一个数组

    c) array(字段,验证规则,错误提示,验证条件,附加规则,验证时间)

    d) 验证规则:require、email

    e) 验证条件:

        i. 0  字段在$_POST里边存在就验证 

        ii. 1  必须验证

        iii. 2  值不为空才验证

    f) 附加规则:regex   in   callback  

 

第三天**********************************************************************************************************

【用户注册完善】

implode()把数组元素用逗号给合并起来

代码部分:

页面跳转:成功呈现笑脸。

 

【命名空间】

namespace

1.在php里边,同一个应用请求里边如果存在两个方法(类名),他们的名字一样(例如都是getName()),由于php本  

身语法规则的限制,系统是要报错的

 解决方法:

① 把他们的名字改为不一样的 例如  agetName()   bgetName()

② 通过命名空间解决(只有学习tp框架才用命名空间,其他语言都不用命名空间)

    Yii 框架   为了避免名字重复引起问题,同步的类前边都有 C  字样

 

1. 简单应用

    a) 命名空间是虚拟的定义空间,不是真实存在目录(可以写一些假的)

    b) 命名空间的分隔符都是反斜杠 \

    c) 非限定名称:getName()  获得与其最近的命名空间的getName()

    d) 限定名称:beijing\getName()  相对方式  通过最近的命名空间定位beijing\getName()

    e) 完全限定名称: \beijing\getName()  直接在指定的命名空间获得具体元素

    f) 命名空间针对:函数、类名、常量三者其作用,在命名空间里边把这三种统称为元素

                

        定义常量的时候,都定义为大写的。

    

2.子空间应用

            

 

3. 别名和导入

    a) 导入/引入 use

    b) 使用一个元素,使用非限定名称,在当前最接近的空间里边获得元素

    c) 如果当前空间里边没有指定元素,也可以在导入的空间里边寻找

          

    d) 别名应用:

    e) 如果在引入空间的时候也把元素给引入了,在当前的空间里边也有同名字的元素,那么这个外来的元素和内部元素要有冲突,这时可以通过别名定义来重新给外来的元素起名字并使用             

                     

4. 公共空间

    a) 第一种情况

    b) 没有使用namespace定义空间,当前空间就是一个公共空间

    c) 例如一个有namespace的文件引入了一个没有namespace的文件程序

    d) 没有namespace的文件空间就是公共空间

    e) 在namespace文件里边可以通过\斜杠直接访问公共空间元素

    f) function getName(){}  ------公共空间的元素

    g) namespace beijing;

    h) function getName(){}  -----beijing空间的元素

    i) 第二种情况

    j) 当前文件没有namespace、但是引入的文件有namespace

    k) 当前文件就是公共空间,引入文件有自己空间      

            

公共空间有两种情况:

1. 当前有空间,引入没有空间(公共空间)

    a) 默认使用当前空间的元素.

    b) 统一用"\"斜杠引入公共空间元素.

2. 当前没有空间(公共空间),引入有空间

    a) 默认调用当前公共空间的元素(非限定名称)

    b) 使用有公共空间的元素  (限定名称、完全限定名称)

 

同一个页面里边有许多空间,在页面最下边使用上边空间的元素,名称需要使用完全限定名称,还可以把上边空间的元素给use引入过来也可通过非限定名称或限定名称使用

 

命名空间使用注意:

1. 针对类名、函数名、常量const其作用

①  define()定义的常量不受命名空间限制

2.  声明namespace的当前脚本的第一个命名空间前面不能有任何代码(header头代码也要写在下边)

3. 命名空间是虚拟抽象的空间,不是真实存在的目录

4. 当前文件可以include具有命名空间的文件,默认空间是当前文件的公共空间

5. 元素调用分:非限定名称、限定名称、完全限定名称

 

简单使用:同一个页面定义了许多单级命名空间

子空间:通过\斜杠定义多级命名空间

公共空间:为了程序比较严谨,公共空间的元素都使用\斜杠访问

空间引入和别名:use   as

 

【tp框架对多语言的支持】

多语言设置就是通过get参数告诉当前的请求使用何种语言

第一次使用get变量传递语言,之后语言还会保存在cookie里边,供下次使用

如果get没有传递语言,浏览器会根据当前地区选中对应的语言,我们程序也可以读取浏览

器的对应的语言变量选择对应的语言

 

设置步骤:

1. 多语言通过行为Behavior支持:ThinkPHP/Library/Behavior/CheckLangBehavior.class.php

2. 语言包一共有4种,后定义的要覆盖先定义的(类似配置文件config.php覆盖convertion.php)

3. 在config.php里边开启多语言支持

4. 确保行为Behavior代码执行

a) 手动启动该CheckLangBehavior行为

b) shop/Common/Conf/tags.php

5. 语言包4个等级

6. 获得语言变量信息

    a) L()快捷函数,可以获得全部或指定语言变量

    b) 使用语言,获得全部语言,assign()传递语言变量到模板进行具体使用(assign:赋值,分配)。

    c) {$Think.language.名称}

7. 每个语言自己对应具体的一个文件

总结:

1. 命名空间

i. namespace  use   

ii. 非限定名称(当前空间元素)  限定名称(相对空间的元素)  完全限定名称(绝对定位元素)

iii. 简单使用(同一个文件定义许多命名空间)

iv. 子空间(多级命名空间)

v. 引入空间:空间和元素都引入、只引入空间

vi. 别名使用:

vii. 公共空间

2. 多语言

 

【tp框架验证码支持使用】

ThinkPHP/Library/Think/Verify.class.php

$verify = new 命名空间Verify();

$verify -> entry();  生成一个验证码

 

一个单独的方法生成验证码

 

    

验证码需要在模板中使用

    <img  src=http://www.mamicode.com/”路由地址Manager/verifyImg” alt=”” />

    

验证输入的验证码是否正确

本身验证码信息存储在session里边

session存储的验证码是加密后的数据

Verify类给我们提供了一个方法进行验证码的有效性验证

$verify -> check(用户输入验证码);   返回真,表示验证码正确

【用户登录实现】

Manager

判断用户名、密码是否是正确的,如果是正确的,再把信息存入session里边表示是登录状态

 

旧的解决方案:

select * from sw_manager where name=$name and pwd = $pwd;

同时查询用户名和密码的信息记录,如果存在就是正确的,否则用户名或密码错误

该方式不安全,会增加sql语句注入的风险

 

现在流行的解决方案:

select * from sw_manager where  name=$name;

首先,查询指定名字的记录信息

其次,如果记录存在,再把记录里边的密码拿出来 与 用户输入的密码进行比较

如果比较一致,就说明用户名和密码正确

用户名和密码在model模型里边的判断:

tp框架关于session操作(cookie

    //session(name,value, 有效时间)  设置session

    //session(name)  获取session

    //session(name,null)  删除指定session

    //session(null)  清空全部session

用户退出系统

【tp框架实现数据分页】

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

2. 具体分页效果实现

【缓存使用】

smarty里边也有缓存,是页面静态化的缓存页面缓存

数据缓存

数据缓存介质:file文件、memory内存、数据库

可以把一些不经常使用的mysql数据临时放入缓存里边,每次用户获得信息就从缓存里边获得,大大的提升的mysql的性能,较少服务器开销

 

文件缓存:fopen  fwrite()  fread()

memory内存缓存:安装内存缓存软件,启动软件服务,set()  get()方法对内存数据进行读入读出操作

数据库缓存:建立数据表,启动mysql数据  insert()   select()  update()

 

不同介质的缓存操作的手段也不一样

tp框架已经把各种缓存设置好了,我们可以通过统一的行为操作不同类型的缓存

使得缓存使用非常容易入门。

S(name,value)  设置缓存

缓存操作:

S(name,value,有效期(秒));  设置缓存变量

S(name)  读取缓存变量信息

S(name,null)  删除指定的缓存变量

S(null)删除全部的缓存变量

 

 

 

缓存案例原理:

    缓存里边有数据直接返回使用

    否则去数据库查询信息,再缓存,再供使用

    下次就会跑到缓存里边获得指定的信息,过了有效期还要重启跑到数据库获得数据

                

 

生成的具体缓存文件:

80%的缓存是内存缓存。

 

tp框架实现附件上传】

<form  enctype="multipart/form-data">

$_FILES

move_uploaded_file(临时路径名,真实路径名);

 

附件上传逻辑代码:

 

 

【为已经上传的图片制作缩略图】

原理:利用已有图片创建一个画板

  把画板给缩小一点imagecopyresampled

    imagepng($im,路径名);  保存到系统一个指定目录

    ThinkPHP/Library/Think/Image.class.php

    open() 打开一个图像资源

    thumb()制作缩略图,设置图像的宽度、高度、达到制作缩略图效果:自动地按比例进行缩放

    save() 保存图像, 

 

 

 

为上传的图片生成缩略图:

 

【面向切面编程之行为Behavior分析】

1.面向切面:是一种设置模式

         把一个大块的功能给分解为小块的功能

        这样小块的功能利于开发、维护、升级、部署

 

2.tp框架的面向切面编程设计体现在Behavior行为里边,在ThinkPHP/Library/Behavior

3.行为:

 

4.tp框架的行为Behavior如何执行:

    1. 框架执行流程分析:index.php  ThinkPHP.php  Think.class.php   App.class.php。这是主要的文件,而行为                 与Think.class.php联系最紧密

    2. Think::start();

    3. ThinkPHP/Conf/Mode/common.php  tags标签内容是行为的内容

    4. 自定义shop/Common/conf/tags.php文件

    5. 自定义tags.php内容会覆盖指定的common.php的配置内容

 

App.class.php

1. function run();

2. Hook::listen(‘app_begin‘);

3. ThinkPHP/Library/Think/Hook.class.php

4. function listen()

5. tags标签的内容解析出来: CheckLang

6. self::exec(‘CheckLang’);

7. function exec()

8. CheckLangBehavior

9. new  CheckBehavior;

10. obj -> run();  运行具体行为

 

总结:

1. 1. 验证码Verify   entry()

i. 独立路由进行验证生成

ii. check(用户输入验证)

2. 数据分页

3. 缓存使用S();

4. 附件上传Upload.class.php   uploadOne()

i. 注意:rootPath 根目录路径需要设置正确

ii. 日期路径也会自动被创建

iii. 生成缩略图Image.class.php

iv. open()

v. thumb()

vi. save()

5. Behavior行为分析

 

作业:

1. 后台用户登录逻辑实现(用户登录信息存入session表示登录状态)

2. 验证码生成、及具体应用判断

3. 后天添加商品上传图片(生成缩略图)

 

登录系统、验证码、分页、上传、缩略图