• ThinkPHP


    thinkphp

    介绍

    1.什么是框架

        - 特征1 : 一堆代码的集合
        - 特征2 : 一个半成品应用
        - 特征3 :包含了一些优秀的设计模式

    2.为什么要使用框架
    - 不使用框架的弊端

    
    - 每个人代码风格不一样,不便于开发和后期维护
    -  一小处的修改,会牵扯出很多地方的修改
    - 在后期满足客户需求(功能拓展)存在局限性

    • 使用框架的好处
    - 使用框架会帮助我们简单快速高效的开发项目
    - 可以然能给我们有更多时间专注于业务逻辑的开发,不需要关注底层架构
    - 便于处理多人协作开发中遇到的问题

    3 常见的框架
    - Zend Framework
    是重量级框架,是php语言公司触屏的官方框架,比较臃肿,启动较慢
    - YII
    美国华人开发,外企应用比较多
    - Symfony
    重量级 国外框架
    - Laravel
    轻量级 国外框架
    - Codelgniter
    轻量级框架,简称CI框架,代码火焰。国外框架
    - ThinkPhp
    是一款国人开发的框架。国内普遍。适合入门级
    - ……..

    4.MVC
    - 什么是MVC
    MVC是一种设计模式。他是将用户的输入、输出、逻辑相分离,将整个项目分为三个部分:
    - 控制器(controller)
    - 模型(Model)
    - 视图(View)

    ======================

    ThinkPHP 框架

    下载步骤

    第一步:
    - 目录结构

    第二步:下载经典的3.2.3版本
    - 目录结构

    第二步:自行解压

    =============================================

    目录结构

    最外面的总体结构

    • 目录结构

    Aplication目录下面的文件

    • 目录结构

    Thinkphp目录下面的文件

    目录结构
    目录结构

    Thinkphp –> config目录下面的文件

    目录结构

    注意:
    • convention.php 是系统级别的配置文件。另外还有应用级别和分组级别的配置文件

    • 作用范围上:

      • > 系统>应用>分组
    • 优先级上:

      • > 分组>应用>系统

    thinkphp_3.2.3_fullThinkPHPLibraryThink目录下

    目录结构

    部署(重点)

    1.配置站点目录
    目录结构

    2.配置Apache虚拟主机的配置文件,创建一个虚拟主机
    - 文件目录 :apacheconfextrahttpd-vhosts.conf
    - 步骤:
    - 将之前的一段站点配置代码复制 进行修改
    目录结构
    2.重启Apache
    3.修改host文件,将配置文件中申明的两个域名做一下绑定(解析)
    - #### host文件位置:C:WindowsSystem32driversetchosts

    ————-
    - #### 快速找到位置
    - 1.运行 drives
    - 2.运行 to hosts
    ————-
    - #### 添加域名绑定解析


    • 看是否绑定成功 在cmd中使用ping命令


    • 在浏览器中查看(下图表示成功)


    • 将代码文件复制到站点目录中

      -(如:将thinkPHP里面的文件复制进去)为了一步步学习thinkPHP特性,我们只复制两个文件,如下图


    • 再次通过浏览器查看


    • ### 打开站点目录,会发现多了一个Application目录。(刚刚并没有复制进去)

    • #### 生成的Application和thinkphp解压包解压出来的Application不一样

    • ### Common目录下

    细节问题

    • ### 自动生成
      • 在首次运行index.php入口文件时会自动生成相应的目录。目录的名字取决于在index.php定义的常量APP_PATH

        • 如果改变的话,就会生成相应的目录。
          ————-
    • 目录安全文件

      • 在自动生成的目录下都会有一个空白的html文件,文件名叫做index.html.这就叫做目录安全文件
      • 作用:
        • 隐藏目录结构,保证安全

    • 默认访问

      • 默认分组/平台:Home
      • 默认控制器:index
      • 默认方法:index()
        可以在系统配置文件中找到:WWW hinkPHP-learningThinkPHPConf

    thinkPHP中控制器

    • 控制器创建

      • 命名规则: 控制器名(英文首字母大写)+Controller+.class.php

        • 例如:

          UserController.class.php

          <?php
          
          #声明命名控件
          
          namespace HomeController;
          
          #引入父类控制器
          
          use ThinkController;
          
          #声明控制器(类)并且继承父类
          
          class UserController extends Controller {
            public function test(){    
            }
          } ?> 
      • 命名空间声明和使用必须和目录挂钩

      • 完善 测试UserController.class.php

        ruby
        <?php
        #声明命名控件
        namespace HomeController;
        #引入父类控制器
        use ThinkController;
        #声明控制器(类)并且继承父类
        class UserController extends Controller {
        public function test(){
        echo "测试UserController.class.php成功";
        }
        }

      - 根据需要,后期可添加控制器     
    

    路由形式(重点)

    路由:是指访问项中具体某个方法的URL地址

    四种路由形式

    • 普通形式路由(get形式路由) (get-2k; post-8M)

      http://网址/入口文件?m=分组名&c=控制器名&a=方法名&参数名=参数值
      例如访问上述控制器的方法,并且传递一个参数 id = 1:
      http://www.xingheng.com/index.php?m=Home&c=User&a=test&id=1

    - 缺点:在URL暴露参数,不安全

    • Pathinfo形式路由
      • PATHINFO模式是系统的默认URL模式,提供了最好的SEO支持,系统内部已经做了环境的兼容处理,所以能够支持大多数的主机环境。对应前面的URL模式,PATHINFO模式下面的URL访问地址是:
        `aidl
        http://网址/入口文件/分组名/控制器/方法/参数名/参数值/
        例如访问上述控制器的方法,并且传递一个参数 id = 1:
        http://www.xingheng.com/index.php/Home/User/test/id/1/
        `

    • Rewrite形式路由(默认)

      • REWRITE模式是在PATHINFO模式的基础上添加了重写规则的支持,可以去掉URL地址里面的入口文件index.php
      • 不能直接使用,需要额外配置WEB服务器的重写规则。

        1.打开重写(再此文件apacheconfhttpd.conf)

        • 如果是Apache则需要在入口文件的同级添加.htaccess文件

        • 内容如下:

                    <IfModule mod_rewrite.c>
                    RewriteEngine on
                    RewriteCond %{REQUEST_FILENAME} !-d
                    RewriteCond %{REQUEST_FILENAME} !-f
                    RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
                    </IfModule>

      “`


    • 兼容形式路由

      • 兼容模式是用于不支持PATHINFO的特殊环境,URL地址是:
        http://网址/入口文件?s=/分组名/控制器名/方法名/参数名/参数值

        http://www.xingheng.com/index.php?s=/Home/User/test/id/60
        

      • 只有一个参数s

    - 兼容模式配合Web服务器重写规则的定义,可以达到和REWRITE模式一样的URL效果。

    路由形式的配置

    ##### 在系统配置文件中体现—>convention.php

    • 上图的配置文件可以看出默认的路由形式是 1 ;就是Pathinfo形式路由
    • 不影响其他形式路由形式访问,影响的是thinkPHP系统封装的URL组装函数(U函数)的生成URL地址的形式。

    ## 分组
    #### 一般项目会根据某个功能的适用对象进行分组。也就是平台.比如前台和后台

    • ThinkPHP下的Application下Home文件夹就是一个分组。可根据需求创建新的。

      • 第一步:创建一个分组目录,目录与Home同级

      • 第二步:创建一个分组目录结构

      • 第三步:在创建的分组下Controller文件夹下创建控制器,写方法,测试

      • 第四步:访问路由
        “`aidl
        http://网址/入口文件/分组名/控制器名/方法

      http://xingheng.com/index.php/Admin/Test/test

    ```
    
    ----------
       ![](https://github.com/HunterXing/resourse/blob/master/images/screenshot/screenshot032.png?raw=true)
    
       #### *上述就是创建分组的步骤,如果要创建分组,可以根据以上进行*
    
    ----------
     ## 控制器中的跳转
    
    ### 1.URL组装
    - URL组装就是根据某个规则,来组成一个URL地址,这个功能叫做URL组装,在ThinkPHP中,一个封装的函数来处理URL组装,这个方法叫*U方法*。
    - 除了U方法,还有`A B C D E F G I M R S `等方法,这些方法都定义在系统函数库文件中(`function.php`)
        ![](https://github.com/HunterXing/resourse/blob/master/images/screenshot/screenshot033.png?raw=true)
    - *语法格式*  
      - `U('URL路径',参数数组);`  
    
       ```aidl
         <?php
            #声明命名空间
            namespace AdminController;
            #引入父类控制器
            use ThinkController;
            #声明并且继承父类控制器
            class TestController extends Controller{
                 #编写测试方法
                 public function test(){
                    echo "hello world";
                 }
    
                 public function test1(){
                    echo U('index'); 
                 }
    
                 public function test2(){
                    echo U('Index/index'); 
                 }
    
                  public function test3(){
                    //后面的数组可以传递多个参数
                    echo  U('Index/index',array('id'=>789456));
                 }
    
    
            }
    
    
       - 使用U方法组装出当前控制器下index方法地址
          - `U('index');`  
    - ![](https://github.com/HunterXing/resourse/blob/master/images/screenshot/screenshot034.png?raw=true)
    
       -U方法组装出另外一个控制器Index的index的地址。
          - `U('Index/index')`
    - ![](https://github.com/HunterXing/resourse/blob/master/images/screenshot/screenshot035.png?raw=true)
    
       - #### 如果给指定的页面添加参数,比如给Index控制器下的index方法传递一个 id = 789456; 则:
       - `U('Index/index',array('id'=>789456))`
    - ![](https://github.com/HunterXing/resourse/blob/master/images/screenshot/screenshot036.png?raw=true)
    
    ---------
    ### 总结出一个通用的格式
        - U('分组名/控制器名/方法名',array('参数名1'=>参数值1,参数名2'=>参数值2));
    
    ### 1.系统跳转方法
    -ThinkPHP系统中哟冾跳转方法,分别是成功跳转和失败跳转:
      - 成功跳转:$this->success(跳转提示,跳转地址,等待时间);
      - 失败跳转:$this->error(跳转提示,跳转地址,等待时间);
    - 跳转提示参数必须要有,后面的可以没有。
    ```aidl
         public function test4(){
                //应该跳到本页的test方法,效果是“hello world”
                $this->success('跳转成功',U('test'),5);
             } 
    
    
              public function test5(){
                //应该跳到本页的test方法,效果是“hello world”
                $this->error('跳转失败',U('test'),5);
             } 
    
           }
    
    
    
    
    <div class="se-preview-section-delimiter"></div>
    
    • 成功跳转
    • 失败跳转

    ## ThinkPHP中的视图(重点)
    ### 1.什么是视图
    - 视图就是MVC三大组成部分中的V(View),负责信息的输出和展示
    ### 2.视图的创建
    - 创建的位置需要书分组目录下的View目录中与控制器同名的目录中,例如:
    - Test控制器中的login方法,需要一个模板,则模板文件login.html需要放在View/Test/login.html
    - 例如创建Test控制器的test方法的模板视图,则位置如下:

    ### 3.视图的展示
    - 使用display方法;
    - 语法格式:

    | 语法格式 | 效果 |
    | ———– |:———–:|
    | this>display();|||this−>display();|展示当前控制器下与当前请求方法名称一致的模板文件||this->display(‘模板文件名’【不带后缀】 | 展示当前控制器下的指定模板文件 |
    | $this->display(‘View目录下的目录名/模板文件名【不带后缀】) | 展示制定控制器目录下的制定模板文件 |

    • 案例:
      • 在Test控制器中的test方法中展示test.html
      • 在Test控制器中的test1方法中展示test.html
      • 在Test控制器中的test2方法中展示View/Demo/test.html

    ### 4.变量分配(初阶)
    - 在实际开发中不仅仅只是展示模板这么简单,往往要展示数据。这个时候变量还在控制器的方法中。需要将数据传递到模板中并且展示。这个叫做变量分配。
    - 在ThinkPHP系统中封装好了一个变量分配的方法,这个方法叫做assign
    - 具体语法 :this>assign(,this−>assign(′模板变量名′,php中的变量名);一般情况下,两个参数名一样(习惯)
    - 案例:在Test控制器中的test方法中传递一个变量给test.html展示。
    “`php
    public function test(){
    //echo “hello world”;

                $var = data('Y-m-d H:i:s',time());
                $this->assign('var',$var);
                //展示模板
                $this->display();
             }
    



    - 目前已经将var变量传递给模板文件test.html,在模板文件中如何展示数据呢?
    - 默认的展示变量的方法是:
    - {$模板中的变量名}
    -


    ### 5.变量分隔符
    - 在ThinkPHP中默认的变量分隔符是“{”和“}”,其是可以被更改的,可以在配置文件中修改
    -


    ### 6.模板常量的替换机制
    - 在实际开发中,在引入图片、css、js等资源文件时,往往需要写一些比较复杂的路径,所以这时候需要替换机制。
    - 在ThinkPHP中默认给我们几个常用的模板常量。
    - __MODULE__:表示从域名后面开始一直到分组名结束的路由
    - __CONTROLLER__:表示从域名后面开始一直到控制器结束的路由
    - __ACTION__:表示从域名后面开始一直到方法名结束的路由
    - __PUBLIC__:站点根目录下的Public目录的路由
    - __SELF__:表示从域名后面开始一直到路由的最后(如果没有参数,则__SELF____ACTION__所表达的内容是一样的)

     - 如下图:
      - ![](https://github.com/HunterXing/resourse/blob/master/images/screenshot/screenshot043.png?raw=true)
    
    • 其中ThinkPhp中关于模板常量的代码在行为文件中,路径如下

      • ThinkPHPLibraryBehaviorContentReplaceBehavior.class.php
        -
    • 模板常量的核心就是字符串的替换

      • 为了后期使用的方便,我们可以在配置文件中定义一个自定义的模板常量:
        • 说明:在开发的时候,建议不要去修改系统配置文件。可以将需要修改的配置项在分组/应用级别的配置文件中去定义
        • 上面就是自定义的模板文件。下面测试一下:

    鲜花会生锈,盐巴会腐烂
  • 相关阅读:
    【链接】idea没有svn
    移动端适配解决方案
    项目中多个文件引入同一份公共样式less文件导致编译打包后有多份样式
    2020最新编辑器集成eslint、prettier、stylelint,git提交预检查代码配置
    eslint+prettier学习
    artTempate模版继承父模版之后再引入子模版不生效?
    iOS底层原理开篇
    iOS应用千万级架构:安全与加密
    使用RabbitMQ实现延迟任务
    JAVA三元运算符空指针引用的坑
  • 原文地址:https://www.cnblogs.com/hunterxing/p/9709288.html
Copyright © 2020-2023  润新知