zoukankan      html  css  js  c++  java
  • ThinkPHP框架基础

    ThinkPHP

    一.php框架基础介绍

    真实项目开发步骤:

    1. 多人同时开发项目,协作开发项目、分工合理、效率有提高(代码风格不一样、分工不好)
    2. 测试阶段
    3. 上线运行
    4. 对项目进行维护、修改、升级(单个人维护项目,十分困难,代码风格不一样)
    5. 项目稳定的运行阶段
    6. 项目停止运行(旧项目的人员已经全部离职,新人开发新项目)

    问题:

    1. 多人开发项目,分工不合理,(html   php   mysql)

    2. 代码风格不一样,后期维护十分困难

    3. 项目生命周期十分短,项目生命没有延续性,造成资源浪费、人员浪费

    4. 项目不能很好适应客户需求,牵一发而动全身。

    其他相关框架

    1. zendframework   zend php语言公司发布的官方框架,重量级(功能多)

    2. yii   美国华人开发的框架,xue qiang, qiang,  重量级框架,纯OOP框架

    3. CI  CodeIgniter轻量级框架,开发速度快,部署灵活

    1. cakephp外国框架,重量级,速度慢
    2. symfony外国重量级框架
    3. ThinkPHP轻量级框架,国人框架,入门容易

    什么框架:

           一堆代码的集合,里边有变量、函数、类、常量,里边也有许多设计模式MVC、AR数据库、单例等等。

           框架可以节省我们50-60%的工作量,我们全部精力都集中在业务层次。

    为什么使用框架

    l   框架可以帮组我们快速、稳定、高效搭建程序系统

    l  该系统由于框架的使用使得本身的维护性、灵活性、适应客户需求方面得到最大化的增强。

    l  使用框架的过程中可以使得我们的注意力全部集中业务层面,而无需关心程序的底层架构。

    ThinkPHP版本介绍

    thinkphp.cn

    thinkphp 3.2版本

    1. 解压后thinkphp文件夹中的文件,入口文件换成 index.php

    index.php-----是解压出来的第一个php文件,是一个项目的入口文件,也就是项目所有的页面都要走此页面

    2. conf 配置文件夹

      3. library 核心资源库中

     

    4. library 核心资源库中核心文件 Think

    ThinkPHP-----核心文件夹(里面的东西不要修改)

    ThinkPHP包含着:
    **Common----核心函数库(存放用户自定义的函数)
    **Conf-----配置文件(主要存放在convention.php)
    Home----
    Lang----语言包
    **Library-----核心资源库 (存放的是一些核心类:Library/Think下全部是类)
    Mode----模型文件夹
    Tpl-----模板

    Application-----存放项目的文件夹,可以改的

    public----存放一些公有的东西

    框架项目部署

     1. 打开index.php入口文件,将原来的Application改成JiaoWu(如下所示)

    复制代码
    <?php
    // 应用入口文件
    
    // 检测PHP环境
    if(version_compare(PHP_VERSION,'5.3.0','<'))  die('require PHP > 5.3.0 !');
    
    // 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false
    define('APP_DEBUG',True);
    
    // 定义应用目录
    define('APP_PATH','./JiaoWu/');//自己的文件名(在这里可以随便命名)
    
    // 引入ThinkPHP入口文件
    require './ThinkPHP/ThinkPHP.php';
    
    // 亲^_^ 后面不需要任何代码了 就是如此简单
    复制代码

    2. 访问入口文件的同时系统会自动把对应的应用目录文件JiaoWu创建出来

    3. 打开Home文件夹

    MVC模式

    MVC模式:
    Model 模型 模型(数据)层 
    View 视图 视图层 
    Controller控制器 逻辑层

    M: 操作数据(数据连接,数据访问)
    V:提供显示模板
    C:实现业务逻辑

    MVC:约定胜于配置(约定非常的重要)

    控制器访问及路由解析

    通过url地址get参数找到指定的控制器,并进行对应方法调用请求

    http://网址/index.php?m=模块名称&c=控制器&a=方法

    以上url地址信息代码不够优雅、不安全。

    action:操作,放在控制器里面的方法

    之前的访问方式:访问具体的页面

    访问的方式:访问控制器下的操作(某个方法),不是一个具体的页面

    1.MVC的4种访问方法

    1.找到入口文件index.php

    2.再找到模块名,控制器,方法名(操作)

    以下是Home模块中的LoginController.class.php利用4种方法对其访问

    复制代码
    <?php
    namespace HomeController;
    use ThinkController;
    class LoginController extends Controller
    {
        public function index()
        {
            echo "login---登录";
        }
        
    }
    复制代码

    1.  http://网址/index.php?m=XX&c=XX&a=XX   基本get模式

    写法:localhost:8080/tp/index.php/?m=Home&c=Login&a=index

    2.http://网址/index.php/模块/控制器/操作方法路径模式pathinfo(推荐使用)

    写法:locahost:8080/tp/index.php/Home/Login/index

     3.http://网址/模块/控制器/操作方法           rewrite重写模式

    写法:http://localhost:8080/tp/Home/Login/index(自己没有实现)

    4.http://网址/index.php?s=/模块/控制器/方法兼容模式

    写法:http://localhost:8080/tp/index.php/?s=Home/Login/index(4的写法)

       http://localhost:8080/tp/?s=Home/Login/index(虽然也可以不知道为啥)

    1.具体url地址模式设置(配置文件ThinkPHP/Conf/convertion.php)

    URL_MODEL  =  0/1/2/3  分别代表四种url地址模式

    下图Shop改为JiaoWu

     

    config.php是我们当前自己项目的配置文件,我们可以通过修改该文件达到配置变量的目录

    这个文件在系统运行过程中会覆盖convertion.php的配置变量

    include “convertion.php”;

    include “config.php”;  后引入的文件要把先引入的文件配置变量给覆盖掉

    换句话说:也就是修改配置是在JiaoWu/Home/config.php中而不是在核心资源库convertion.php

    我们系统有兼容4中url地址模式的使用

    系统有的时候会自动创建url地址,它会根据当前模式进行url地址创建使用

    快捷函数U();  创建url地址

    修改配置:

    特别注意:这里的控制模式不是来控制访问的,是来控制生成的

    <?php
    namespace HomeController;
    use ThinkController;
    class IndexController extends Controller {
        public function Login()
        {
            //echo "你好";    
            //echo U("Home/Index/Login");
            //echo U("Index/Login");
            echo U("Login");//输出同样
            //利用U()快捷方法创建路径的三种方式
        }
    }

    注意: 如果是在当前模块的当前控制器下,可以只写方法
          如果是在当前模块的其他控制器下,要写上控制器和方法
          如果是在其他模块下,模块、控制器、方法名(操作)都要写

    修改配置参数:

    'URL_MODEL'             =>  1,   (最常用)

    输出结果:/tp/index.php/home/index/login.html

    'URL_MODEL'             =>  0, 

    输出结果:/tp/index.php?m=home&c=index&a=login

    'URL_MODEL'             =>  2, 

    输出结果:/tp/home/index/login.html

    'URL_MODEL'             =>  3,

     输出结果:/tp/index.php?s=/home/index/login.html

    开发、生产模式

    开发调试模式:系统需要加载大概24个文件  index.php  define(“APP_DEBUG”,true);

    生产模式:系统只需要加载很少的大概7个文件在入口文件

    index.php中定义: define(“APP_DEBUG”,false);

    节省了许多文件的开发、关闭的系统开销,节省资源

    要在页面显示trace信息,需要在自己的配置文件中:

    define('APP_DEBUG',True);   为true时:

    define('APP_DEBUG',False);    为false时:

    而且还会出现

    控制器和对应方法创建

    控制器是MVC模式中的核心,tp默认有一个Index控制器:

    如果要自己创建一个控制器Login:

    1. 在JiaoWuHomeController文件夹下新建一个控制器文件LoginController.class.php

    注意:文件命名规则,按照驼峰法命名

    在IndexController.class.php中

    <?php
    namespace HomeController;
    use ThinkController;
    class IndexController extends Controller {
        public function index(){
            $this->display();
        }
        
    }

    在view下一级index.html中

    <html>
    <meta charset="utf-8" />
    <head></head>
    <body>
    <h1>主页面</h1>
    </body>
    </html>

    此时出现的页面时:

    原因:上面两者不是相互对应的,模板文件没有创建正确,这时候我们就要去创建模板文件

    如何正确创建模版:

    如果我们想要访问index控制器中的index方法,首先我们要创建一个index控制器对应的模板文件夹,该文件夹就对应着index控制器:

    换句话说也就是在View目录下新建目录Index目录然后再在里面新建index.html文件

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    </head>
    
    <body>
    <h1>这是一个主页面(与IndexController.class.php对应)</h1>
    </body>
    </html>

    显示效果为:

  • 相关阅读:
    mybatis之mapper.xml分析
    mybati之运行过程
    ibatis中的resultClass,parameterClass,resultMap,resultType的使用与区别
    mybatis之parameterType传递多个参数
    mybati之#与$的区别
    【Java面试题】20 运行时异常和一般异常有何区别
    【Java面试题】19 final,finally和finalize的区别
    【Java面试题】18 java中数组有没有length()方法?string没有lenght()方法?下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";
    【Java面试题】17 如何把一个逗号分隔的字符串转换为数组? 关于String类中split方法的使用,超级详细!!!
    【Java面试题】16 静态代码块,main方法,构造代码块,构造方法
  • 原文地址:https://www.cnblogs.com/kevin2016/p/5721709.html
Copyright © 2011-2022 走看看