• ThinkPHP3快速入门教程-:基础


    一、ThinkPHP的认识:

    ThinkPHP是一个快速、简单的基于MVC和面向对象的轻量级PHP开发框架

    二、下载后的目录结构:

    ├─ThinkPHP.php     框架入口文件

     ├─Common 框架公共文件

     ├─Conf 框架配置文件

     ├─Extend 框架扩展目录

     ├─Lang 核心语言包目录

     ├─Lib 核心类库目录

     │  ├─Behavior 核心行为类库

     │  ├─Core 核心基类库

     │  ├─Driver 内置驱动

     │  │  ├─Cache 内置缓存驱动

     │  │  ├─Db 内置数据库驱动

     │  │  ├─TagLib 内置标签驱动

     │  │  └─Template 内置模板引擎驱动

     │  └─Template 内置模板引擎

     └─Tpl 系统模板目录

    注意,框架的公共入口文件ThinkPHP.php是不能直接执行的,该文件只能在项目入口文件中调用才能正常运行。

    三、入口文件:

    默认入口:public/index.php(实际部署的时候public目录为你的应用对外访问目录)

    引入入口文件:

    <?php

    require ‘/ThinkPHP框架所在目录/ThinkPHP.php’;

    ?>

    访问路径:http://localhost/app/

    自动生成项目目录,目录结构如下:

    ├─index.php     项目入口文件

     ├─Common 项目公共文件目录

     ├─Conf 项目配置目录

     ├─Lang 项目语言目录

     ├─Lib 项目类库目录

     │  ├─Action Action类库目录

     │  ├─Behavior 行为类库目录

     │  ├─Model 模型类库目录

     │  └─Widget Widget类库目录

     ├─Runtime 项目运行时目录

     │  ├─Cache 模板缓存目录

     │  ├─Data 数据缓存目录

     │  ├─Logs 日志文件目录

     │  └─Temp 临时缓存目录

     └─Tpl 项目模板目录

    移动修改目录入口文件的路径:

    <?php

    define(‘APP_NAME’,’app’);

    define(‘APP_PATH’,’./app/’);

    require ’/ThinkPHP框架所在目录/ThinkPHP.php’;

    ?>

    APP_NAMEAPP_PATH分部用于定义项目名和项目目录,项目名通常就是指项目的目录名称。

    四、调试模式:

    ThinkPHP的运行模式包括调试模式和部署模式,默认情况下是运行在部署模式下面。部署模式下面性能优先,并且尽可能少地抛出错误信息,调试模式则以除错方便优先,关闭任何缓存,而且尽可能多的抛出错误信息,所以对性能有一定的影响。

    开启调试模式(开发完后关闭)

    <?php

    define(‘APP_DEBUG’,TRUE);//开启调试模式

    require ‘/ThinkPHP框架所在目录/ThinkPHP.php’;

    ?>

    关闭调试模式:

    define(‘APP_DEBUG’,false);

    五、配置文件:

    配置文件位于每个项目目录的Conf/config.php,采用定义格式为php返回数组的方式。

    //项目配置文件

    return array{

    配置参数’ => ‘配置值’,

    //更多配置参数

    //...

    };

    注意:

    配置值可以支持包括字符串、数字、布尔值和数组在内的数据,通常我们建议配置参数均使用大写定义。如果有需要,我们还可以为项目定义其他的配置文件。

    六、使用控制器:

    控制器类的命名规范:模块名+Action.class.php(模块名采用驼峰法并且首字母大写)系统的默认模块是Index,对应的控制器就是项目目录下面的Lib/Action/IndexAction.class.php,类名和文件名一致。默认操作是index的一个public方法。

    初次生成项目目录结构的时候,系统已经默认生成了一个默认控制器。

    示例代码:

    class IndexAction extends Action {

    Public function index(){

    Echo ‘hello,world’;

    }

    }

    注意:

    控制器必须继承Action类,一个模块可以包括多个操作方法。如果你的操作方法是protected或者private类型的话,是无法直接通过URL访问到该操作的。

    七、URL请求

    入口文件是项目的单一入口,对项目的所有请求都定向到项目的入口文件,系统会从URL参数中解析当前请求的模块和操作,我们之前访问的URL地址是没有任何参数,因此系统会访问默认模块(Index)的默认操作(index),因此下面的访问和之前是等效的:

    http://localhost/app/index.php/Index/index

    这种URL模式就是系统默认的PATHINFO模式,不同的URL模式获取模块和操作的方法不同。

    普通模式:也就是传统的GET传参方式来指定当前访问的模块和操作,例如:http://localhost/app/?m=module&a=action&var=value

    M参数表示模块

    A操作表示操作(模块和操作的URL参数名称是可以配置的),后面的表示其他GET参数。

    PATHINFO模式:

    是系统的默认URL模式,提供了最好的SEO支持,

    系统内部已经做了环境的兼容处理,所以能够支持大多数的主机环境。

    对应上面的URL模式,PATHINFO模式下面的URL访问地址是:

    http://localhost/app/index.php/module/action/var/value/

    Module(第一参数)表示模块,

    Action(第二参数)表示操作,

    可定制方式:例如通过下面的配置:

    'URL_PATHINFO_DEPR'=>'-', // 更改PATHINFO参数分隔符

    还可支持

    http://localhost/app/index.php/module-action-var-value/

    URL访问。

    REWRITE模式:

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

    如果是Apache则需要在入口文件的同级添加.htaccess文件,内容如下:

    <IfModule mod_rewrite.c>

    RewriteEngine on

    RewriteCond %{REQUEST_FILENAME} !-d

    REwriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

    </IfModule>

    下面的URL地址访问了:

    http://localhost/app/module/action/var/value/

    兼容模式:

    是用于不支持PATHINFO的特殊环境,URL地址是:

    http://localhost/app/?s=/module/action/var/value/

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

    八、视图

    ThinkPHP内置了一个编译型模板引擎,也支持原生的PHP模板,并且还提供了包括Smarty在内的模板引擎驱动。

    Smarty不同,ThinkPHP在渲染模板的时候如果不指定模板,则会采用系统默认的定位规则,其定义规范是TPL/模块名/操作名.html,所以,Index模块的index操作的默认模板文件位于项目目录下面的Tpl/Index/index.html

    例如:

    <html>

    <head>

    <title>hello {$name}</title>

    </head>

    <body>

    Hello,{$name}!

    </body>

    </html>

    要输出视图,必须在控制器方法中进行模板渲染输出操作,例如:

    Class IndexAction extends Action {

    public function index(){

    $this->name = ‘thinkphp’;//进行模板变量赋值

    $this->display();

    }

    }

    display方法中我们没有指定任何模板,所以按照系统默认的规则输出Index/index,html模板文件。

    接下来,我们在浏览器中输入:http://localhost/app/

    浏览器中会输出: hello,thinkPHP!

    九、读取数据

    在开始之前,首先需在数据库thinkphp中创建一个think_data数据表(以mysql数据库为例):

    建表:

    CREATE TABLE IF NOT EXISTS ‘think_data’(

    ‘id’ int(8) unsigned NOT NULL AUTO_INCREMENT,

    ‘data’ varchar(255) NOT NULL,

    PRIMARY KEY (‘id’) //主键

    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

     

    插入记录:

    INSERT INTO ‘think_data’(‘id’,’data’) VALUES

    (1,’thinkphp’),

    (2,’php’),

    (3,’framework’);

     

    配置连接数据库相关信息:

     

    //添加数据库配置信息

    ‘DB_TYPE’     => ‘mysql’,        //数据库类型

    ‘DB_HOST’     => ‘localhost’,   //服务器地址

    ‘DB_NAME’     => ‘thinkphp’   //数据名

    ‘DB_USER’     => ‘root’,   //用户名

    ‘DB_PWD’      => ‘’,   //密码

    ‘DB_PORT’     => 3306,   //端口

    DB_PREFIX=> ‘think_’,   //数据表前缀

     

    或采用如下配置:

     

    ‘DB_DSN’ => ‘mysql://root@localhost:3306/thinkphp’

     

    注意:

    使用DB_DSN方式定义可以简化配置参数,DSN参数格式为:

    数据库类型://用户名:密码@数据库地址:数据库端口/数据库名

     

    如果两种配置参数同时存在的话,DB_DSN配置参数优先。

     

    修改控制器方法进行添加读取数据:

    Class IndexAction extends Action {

    public function index(){

     

    $Data = M(‘Data’); //实例化Data数据模型

    $this -> data = $data -> select();

    $this -> display();

    }

    }

    这里用到了M函数,是ThinkPHP内置的实例化模型的方法,

    使用M方法实例化模型不需要创建对应的模型类。

    可理解为:

    M();是直接操作底层的Model类,而Model类具备基本的CURD操作方法。

    M(‘Data’)实例化后,就可以对think_data数据表(think_是我们在项目配置文件中定义的数据表前缀)进行操作(包括CURD)了。

    定义好控制器后,我们修改模板文件,添加数据输出标签如下:

    <html>

    <head>

    <title>Select Data</title>

    </head>

    <body>

    <volist name=”data” id=”vo”>

    {$vo.id}--{$vo.data}<br/>

    </volist>

    </body>

    </html>

    Volist标签是内置模板引擎用于输出数据集的标签。

    {$vo.id}{$vo.data}的用法和Smarty类似,就是用于输出数据的字段,这里就表示输出think_data表的iddata字段的值。

    访问路径:http://localhost/app/

    显示输出:

        Thinkphp

      php

      Framework

    注意:

    如果发生错误,请检查你是否开启了调试模式或者清空Runtime目录下面的缓存文件。

    总结:

    在本篇我们学习了ThinkPHP的目录结构、URL模式,如何创建项目的入口文件和开启调试模式,以及控制器、模板和模型的基础认识。

  • 相关阅读:
    CodeForces.1174D.EhabandtheExpectedXORProblem(构造前缀异或和数组)
    HDU-6187.DestroyWalls(最大生成树)
    HDU.6186.CSCource.(前缀和数组和后缀和数组)
    <每日一题>Day 9:POJ-3281.Dining(拆点 + 多源多汇+ 网络流 )
    <每日一题> Day8:CodeForces-996A.Hit the Lottery(贪心)
    最小割 + 网络流变体
    <每日一题> Day7:CodeForces-1166C.A Tale of Two Lands (二分 + 排序)
    <每日一题> Day6:HDU递推专题完结
    <每日一题> Day5:简单递推两题
    POJ-3122.Pie(二分法最大化平均值)
  • 原文地址:https://www.cnblogs.com/john-sr/p/6009684.html
Copyright © 2020-2023  润新知