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
      -
  • 模板常量的核心就是字符串的替换

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

鲜花会生锈,盐巴会腐烂
原文地址:https://www.cnblogs.com/hunterxing/p/9709288.html