ThinkPHP 入手

项目目录结构

www  WEB部署目录(或者子目录)
├─index.php       入口文件
├─README.md       README文件
├─composer.json   Composer定义文件
├─Application     应用目录
├─Public          资源文件目录
└─ThinkPHP        框架目录

ThinkPHP目录结构

├─ThinkPHP 框架系统目录(可以部署在非web目录下面)
│  ├─Common       核心公共函数目录
│  ├─Conf         核心配置目录 
│  ├─Lang         核心语言包目录
│  ├─Library      框架类库目录
│  │  ├─Think     核心Think类库包目录
│  │  ├─Behavior  行为类库目录
│  │  ├─Org       Org类库包目录
│  │  ├─Vendor    第三方类库目录
│  │  ├─ ...      更多类库目录
│  ├─Mode         框架应用模式目录
│  ├─Tpl          系统模板目录
│  ├─LICENSE.txt  框架授权协议文件
│  ├─logo.png     框架LOGO文件
│  ├─README.txt   框架README文件
│  └─index.php    框架入口文件

项目目录结构部

项目名称
├─Common         应用公共模块
│  ├─Common      应用公共函数目录
│  └─Conf        应用公共配置文件目录
├─Home           默认生成的Home模块
│  ├─Conf        模块配置文件目录
│  ├─Common      模块函数公共目录
│  ├─Controller  模块控制器目录
│  ├─Model       模块模型目录
│  └─View        模块视图文件目录
├─Runtime        运行时目录
│  ├─Cache       模版缓存目录
│  ├─Data        数据目录
│  ├─Logs        日志目录
│  └─Temp        缓存目录模块设计

模块化的目录结构

Application      默认应用目录(可以设置)
├─Common         公共模块(不能直接访问)
├─Home           前台模块
├─Admin          后台模块
├─...            其他更多模块
├─Runtime        默认运行时目录(可以设置)每个模块是相对独立的,其目录结构如下:
├─Module         模块目录
│  ├─Conf        配置文件目录
│  ├─Common      公共函数目录
│  ├─Controller  控制器目录
│  ├─Model       模型目录
│  ├─Logic       逻辑目录(可选)
│  ├─Service     服务目录(可选)
│  ... 更多分层目录可选
│  └─View        视图目录

增加新模块:只需要在入口文件index.php文件中增加定义就可以。例如:生成Admin模块

define('APP_PATH','./Application/');
// 绑定入口文件到Admin模块访问
define('BIND_MODULE','Admin');
require './ThinkPHP/ThinkPHP.php'

Admin模块不存在,所以会在第一次访问时创建该模块。

PS:新建模块创建成功后 要删除创建语句,不然再访问模块时 会报 找不到控制器的错误异常

开启调试模式

define('APP_DEBUG', true); // 开启调试模式 false关闭调试模式
define('APP_PATH','./Application/');
require './ThinkPHP/ThinkPHP.php';

配置
每个模块都有独立的配置文件,Conf/config.php

控制器
每个控制器对应一个控制器类,命名规范:
控制器名+Controller.class.php(模块名采用驼峰式 且 首字母大写)
系统默认的控制器是Index,对应的模块目录下Controller/IndexController.class.php,类名与文件名一致,默认操作是public 的 index方法。如果设置为private,protected 无法通过URL访问

参数访问
URL:http://localhost/index.php/home/index/hello/name/baby
name为key baby为value
URL访问home模块下的index控制器的hello方法并传参nama=baby
key 名必须与 方法的接收参数名一致

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
    public function hello($name='thinkphp'){
        echo 'hello,'.$name.'!';
    }
}

URL 请求
ThinkPHP单一入口模式访问应用,所有请求应都指向应用的入口文件,系统会根据参数解析当前请求的模块->控制器->操作。
例:localhost/index.php/模块/控制器/操作 如果访问不存在的模块控制器操作,系统会默认访问home下的默认Index控制器的默认Index方法。
URL四冲模式:普通模式,PATHINFO,REWRITE和兼容模式。
1.普通模式 传统GET传参来访问指定模块
http://localhost/?m=home&c=index&a=hello&name=thinkphp
m:模块 c:控制器 a:方法 name:参数名 thinkphp参数值
2.PATHINFO
系统默认的就是该URL模式,提供了最好的SEO支持,环境兼容处理。
http://localhost/index.php/home/index/hello/name/thinkphp/
PATHINFO地址的前三个参数分别是模块/控制器/操作
传参:
http://localhost/index.php/home/index/hello?name=thinkphp

PATHINFO的分隔符配置:更改PATHINFO的URL分隔符
'URL_PATHINFO-DEPR'=>'-'
改后:
http://localhost/index.php/home-index-hello-name-thinkphp

3.REWRIT
在PATHINFO上增加的URL重写,去掉了URL中的index.php入口文件,但需要配置web服务器重写规则。
apache 在index.php入口文件同级目录下增加.htaccess文件 内容:

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

增加后去除index.php
http://localhost/home/index/hello/name/thinkphp/
  1. 兼容模式
    兼容模式用于不支持PATHINFO的特殊环境
兼容模式配合Web服务器重写规则的定义,可以达到和REWRITE模式一样的URL效果。
http://localhost/?s=/home/index/hello/name/thinkphp

视图
ThinkPHP内置编译模板引擎,支持PHP模板,也包括了Smarty在内的模板驱动。ThinkPHP在渲染模板时如不指定模板,则会用系统默认的定位规则。定义规范:模块目录下的View/控制器名/操作名.html 。Home模块的hello操作的默认模板位于home模块目录下

模板文件
<html>
<head>
<title>hello {$name}</title>
</head>
<body>
    hello, {$name}!
</body>
</html>

控制器渲染模板

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
    public function hello($name='thinkphp'){
        //渲染参数
        $this->assign('name',$name);
        //此处可指定任何模板 未指定则按照系统规则调用默认的模板文件
        $this->display();
    }
}

PS:默认模板 需要根据模块创建 模块名文件夹 再创建模板文件 不然会报找不到模板文件错误

数据库
模块/Conf/config.php 配置数据信息

    'DB_TYPE'=>'mysql',// 数据库类型
    'DB_HOST'=>'127.0.0.1',// 服务器地址
    'DB_NAME'=>'magiex',// 数据库名
    'DB_USER'=>'root',// 用户名
    'DB_PWD'=>'',// 密码
    'DB_PORT'=>3306,// 端口
    'DB_PREFIX'=>'fn_',// 数据库表前缀
    'DB_CHARSET'=>'utf8',// 数据库字符集

读取数据

/* * 如果指定了数据库前缀,在调用时会自动拼接 前缀+数据库表名 * M('user') 指的是表名 */ public function getData(){ $DB=M('user'); $result=$DB->find(1); $this->assign('result',$result); $this->display('hello'); }

M函数是think内置的实例化模型方法。不需要创建对应的模型类,直接操作读取数据库。而model类则内置了基本的CRUD方法
模板获取数据

<html>
<head>
<title></title>
</head>
<body>
    hello, {$result.password}!
</body>
</html>

总结实践中的错误:
1. 新建模块创建成功后 要删除创建语句,不然再访问模块时 会报 找不到控制器的错误异常
2. 默认模板 需要根据模块创建 模块名文件夹 再创建模板文件 不然会报找不到模板文件错误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值