thinkPHP框架使用方法


title: thinkPHP框架使用方法
date: 2018-01-05 20:30:44
tags:


1. thinkPHP思想

thinkPHP基于MVC思想,MVC是一种设计模式,他强制的使用应用程序的输入、处理和输出分开。MVC应用程序被分为三个核心部分:模型(model)、视图(view)、控制器(control),他们各自处理自己的任务。
例如:
<div align=center>

[图片上传失败...(image-7538ba-1515156835754)]

</div>

2. 单入口创建项目

<?php
    //单入口 ||  主入口 :路由分配
    
    //开启调试模式:部分做缓存
    define("APP_DEBUG",true);
    //定义项目名称
    define("APP_NAME","Index");
    //定义项目路径
    define("APP_PATH","Index/");
    
    //引入核心文件
    require "ThinkPHP/ThinkPHP.php";
?>

执行上述代码时,系统自动创建一个文件夹,里面包含的内容与系统封装的thinkPHP一样,而这里面的文件就是我们要写的代码。

[图片上传失败...(image-d688cc-1515156835754)]

3. 库目录结构(thinkphp)

 Lib/Think: 为Thinkphp框架核心目录

 Lib/ORG : 为Thinkphp框架自带扩展目录

4. 项目目录结构(home)

  • Lib:放置控制层类和模型层类
    - Action:相当于controler
    - Model: model层
  • Tpl:放置着模板(皮肤)文件,相当于view
  • Conf:系统项目配置目录
  • Common:项目中公共用到的资源,如js,css,图片等
  • Runtime:系统运行时临时目录(若运行中产生缓存现象,可以将该目录中内容进行删除)
    - Cache:模板页面缓存
    - Data:数据字段缓存
    - Logs:系统运行日志
    - Temp:临时文件缓存
    - app:系统配置文件编译缓存

5. thinkPHP的访问规则

  • http:localhost/thinkphp/index.php/index/index
  • Thinkphp规定:所有的主入口文件默认访问index控制器,且所有的控制器默认是去找index方法(动作)
  • 控制器类名必须是于文件名相同(除去.class.php),首字母必须大写,后面加上Action,且要继承Action
// 本类由系统自动生成,仅供测试用途
class IndexAction extends Action {
    public function index(){
            $name = "DR";
            //将变量输出到模板
            //1、(不常用)
            $this->name = "DR";
            //2、(常用)
            $this->assign("height","183cm");
            $this->assign("showTime",$showTime);
            //加载index模板  默认加载
//          $this->display();   
            //加载到指定的模板  不加后缀
            $this->display("test");
    }
  • 方法名通常是public(默认),否则thinkphp无法正常解析

6. 控制器与模板之间的关系

    1. Thinkphp中模板和控制器之间的访问原则
    • 加载模板(跨模板): $this->display(Action:模板名称)
    • 加载模板(本模板):$this->display([模板名称])
            //加载到指定的模板  不加后缀
            $this->display("test");
    1. 控制器与模板之间的变量传递
    • $this->assign('变量名','变量值')
    • 在模板中采用{$变量名}的形式输出变量值
            <ul>
            <!-- offset="1"从什么位置输出  length="2"输出几条 empty="暂时没有数据" 当数据没有的时候显示 -->
            <volist name="arr" id="val" offset="1" length="1" empty="暂时没有数据" >
                <li>姓名是:{$val.name},年龄是:{$val["age"]},身高是:{$val.height}</li>
            </volist>
            
            <foreach name="arr" item="val">
                <p>姓名是:{$val.name},年龄是:{$val.age},身高是:{$val["name"]}</p>
            </foreach>
            
            <!--
                gt : 大于
                egt: 大于等于
                lt: 小于
                elt: 小于等于
                eq: 等于
                neq: 不等于
                heq: ===
                nheq: !==
            -->
            <if condition="$num gt 5">
                num的值大于5
                <elseif condition="$num lt 5" />
                    num的值小于5
                <else />
                    num的值等于5
            </if>
        </ul>
        <!--对str进行加密-->
        {$str|md5};
        <hr />
        当前时间:{$nowTime|date="Y-m-d H:i:s",###}
        <hr />
        处理之后的时间:{$showTime}
        
        
        <for start="1" end="10">
            {$i} <br />
        </for>
        
        
        <switch name="randNum">
            <case value="1" break="1">{$randNum}的值等于1</case>
            <case value="2" break="1">{$randNum}的值等于2</case>
            <default />{$randNum}的值不是1,2
        </switch>
        
        <hr />
        <eq name="randNum" value="2">{$randNum}的值等于2</eq>
        
        <hr />
        {$randNum > 2 ? "大于2" : "小于2"}
        
        <hr />
        <!--in  ||  notin-->
        <in name="randNum" value="2,3,4,5">{$randNum}在值里面</in>
        <hr />
        <!--between-->
        <between name="randNum" value="2,5">
            {$randNum}在值2~5里面
            <else />
            {$randNum}的值等于1
        </between>
        
        <!--引入外部文件  后面不加后缀-->
        <include file="commonView" />
        <!--引入外部文件的时候,如果是外部文件夹里面的文件
            会生成类,要先引入里面的类
        -->
        <include file="Public:header" />
        <!--也可以用相对路径-->
        <include file="../Public/header" />
    1. 控制器调用模板的方式
    • URL: 代表当前操作所在木块地址(同控制方法跳转)
    • APP:代表当前项目的入口文件的地址(跨控制器方法跳转)
    • ROOT:代表网站根目录地址(跨前、后台控制器方法跳转,范围最广)

7. 配置文件

  • 属性配置
    1. 配置文件在config.php文件里
      配置的属性通过大C方法来实例化
<?php
    class ProductAction extends Action{
        function getUrlModel(){
            //实例化配置项  C()方法调用Conf里面的方法
//          echo C("URL_MODEL");
            //实例化自定义
//          echo C("name");
            echo C("height");
        }
    }
?>
 2. 如果有多个配置文件的话,可以通过“LOAD_EXT_CONFIG”=>"user"来进行配置

"LOAD_EXT_CONFIG" => "user", 在config.php里面配置

<?php
return array(
    //'配置项'=>'配置值'
//  "URL_MODEL" => 0
    "name" => "D2222",
    "age" => "19",
    //加入其他配置项文件
    "LOAD_EXT_CONFIG" => "user",
);
?>

8. 连接数据库

    //数据库配置信息
    'DB_TYPE'   => 'mysql', // 数据库类型
    'DB_HOST'   => 'localhost', // 服务器地址
    'DB_NAME'   => 'thinkphp', // 数据库名
    'DB_USER'   => 'root', // 用户名
    'DB_PWD'    => '', // 密码
    'DB_PORT'   => 3306, // 端口
    'DB_PREFIX' => '', // 数据库表前缀 
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,642评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,781评论 6 342
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,604评论 18 399
  • 做这个项目时,服务端最开始是使用原生php写的,在查询数据库时,没有做任何缓存,后来做到商城,采用thinkphp...
    一只好奇的茂阅读 6,084评论 1 48
  • 距离我十八岁生日,还有142天。 从可追溯的记录来看,在16年国庆第一天我就开始倒计时了.在十八岁之前想成功减肥,...
    YemL阅读 227评论 0 0