image
ThinkPHP 概述, ThinkPHP 项目构建流程, ThinkPHP 项目结构, ThinkPHP 配置, ThinkPHP 控制器, ThinkPHP 模型, ThinkPHP 视图, ThinkPHP 的内置模板引擎.
ThinkPHP 是一个免费开源的, 快速, 简单的面向对象的轻量级 PHP 开发框架, 遵循 Apache2 开源协议发布, 是为了 Web 应用开发和简化企业级引用开发而诞生的.
ThinkPHP 的特点, 环境要求等.
官方网址:
http://thinkphp.cn
SVN 的下载地址:
完整版:
http://thinkphp.googlecode.com/svn/trunk
核心版本:
http://thinkphp.googlecode.com/svn/trunk/ThinkPHP
ThinkPHP 遵循简单实用的设计原则, ThinkPHP 框架思想和结构体系进行详细的介绍:
ThinkPHP 的目录结构, 自动生成目录, 项目目录部署方案, 命名规范, 项目构建流程.
ThinkPHP 的目录结构:
系统目录和项目目录
系统目录:
common 包含框架的一些公共文件, 系统定义和惯例配置等.
lang 目录语言文件.
lib 系统的基类库目录.
tpl 系统的模板目录.
mode 框架模式扩展目录.
vendor 第三方类库目录.
项目目录:
index.PHP 项目入口文件
common 项目公共目录
lang 项目语言包目录
conf 项目配置目录
lib 项目基目录
tpl 项目模板目录
runtime 项目运行时目录
- <?PHP
- define('THINK_PATH','ThinkPHP'); // 定义 ThinkPHP 框架路径
- define('APP_NAME', 'test'); // 定义项目名称
- define('APP_PATH', '.'); // 定义项目路径
- require(THINK_PATH."/ThinkPHP.php"); // 加载框架入口文件
- App::run(); // 实例化一个网站应用实例
- ?>
ThinkPHP 自动生成的目录:
common, conf, lang, lib, runtime, tpl;
项目目录:
admin:admin 后台管理项目目录
home:home 项目目录
common: 项目公共目录, 放置项目公共函数
conf: 项目配置目录, 放置配置文件
lang: 项目语言包目录
lib: 项目基目录, 通常包括 action 和 model 目录
runtime: 项目运行时目录, 包括 cache,temp,data 和 log
tpl: 项目模板目录
ThinkPHP: ThinkPHP 系统目录
admin.PHP: admin.PHP 网站的后台入口文件
index.PHP: index.PHP 网站的入口文件
分组模块:
App: App 项目目录
common: 项目公共目录
conf: 项目配置目录
lang: 项目语言包目录
lib: 项目基目录
runtime: 项目运行时目录
tpl: 项目模板目录
public: public 网站公共目录
CSS: CSS 样式文件夹
images: 图片文件夹
JS: JS 脚本文件夹
ThinkPHP 系统目录
index.PHP 网站入口文件
ThinkPHP 创建项目流程:
创建数据库, 数据表, 项目命名创建入口文件, 项目配置, 创建控制类, 创建模型类, 创建模板文件, 运行测试.
- <?PHP
- return array(
- 'APP_DEBUG' => true, // 开启调式模式
- 'DB_TYPE' => 'mysql', // 数据库类型
- 'DB_HOST' => 'localhost', // 数据库服务器地址
- 'DB_NAME' => 'db_database', // 数据库名称
- 'DB_USER' => 'root', // 数据库用户名
- 'DB_PWD' => 'root', // 数据库命名
- 'DB_PORT' => '3306', // 数据库端口
- 'DB_PREFIX' => 'think_', // 数据表前缀
- );
- ?>
- <?PHP
- class IndexAction extends Action{
- public function index(){
- $db = new Model('user'); // 实例化模型类, 参数数据表名称, 不包含前缀
- $select = $db -> select(); // 查询数据
- $this -> assign('select', $select); // 模板变量赋值
- $this -> dispaly('index.html'); // 输出模板
- }
- }
- ?>
模板文件:
- <body>
- <volist name="select" id="user">
- id:{$uer.id}
- <br/>
用户名:{$user.user}<br/>
地址:{$user.address}<hr>
- </volist>
- </body>
ThinkPHP 配置
配置文件时 ThinkPHP 框架程序得以运行的基础文件.
惯例配置, 项目配置, 调式配置, 分组配置, 模块配置, 动态操作配置.
返回 PHP 数组的方式, 所有配置文件的定义格式
- <?PHP
- return array(
- );
- ?>
进行二维数组进行配置
- <?PHP
- return array(
- 'APP_DEBUG' => true,
- 'USER_CONFIG' =>array(
- 'USER_AUTH' => true,
- ...
- ),
- );
- ?>
调试配置
配置文件位于 think\common\debug.PHP
配置文件存储位置, 调式配置文件位于项目配置目录下
系统默认的调试配置文件:
开启日志记录
关闭模板缓存
记录 sql 日志
关闭字段缓存
开启运行时间详细显示
开启页面 trace 信息展示
严格检查文件大小写
ThinkPHP 的控制器
模块类, 存储于 lib\action 目录下:
控制器类必须继承系统的 action 基础类
跨模块调用
- $User = A("User"); // 实例化 UserAction 控制器对象
- $User -> insert(); // 调用 User 模块的 importUser 操作方法
A("User") 是一个快捷方法
等效于:
- import("@.Action.UserAction");
- $User = new UserAction();
还有比 A 更好的方法为:
- R("User","insert"); // 远程调用 UserAction 控制器的 insert 操作方法
- $User = A("User","Admin"); // 实例化 Admin 项目的 UserAction 控制器对象
- $User -> insert(); // 调用 Admin 项目 UserAction 控制器的 insert 操作方法
- R("User", "insert", "Admin"); // 远程调用 admin 项目的 useraction 控制器的 insert 操作方法
- <?PHP
- header("Content-Type:text/html; charset=uft-8"); // 设置页面编码格式
- class IndexAction extends Action {
- public function index() {
- $db = new Model('user'); // 实例化模型类, 参数数据表名称, 不包括前缀
- $select = $db->select(); // 查询数据
- $this -> assign("select", $select); // 模板变量赋值
- $this -> dispaly(); // 输出模板
- }
- }
- ?>
- <?PHP
- header("Content-Type:text/html; charset=utf-8"); // 设置页面编码格式
- class UserAction extends Action{
- public function insert(){
- $ins = new Model("user"); // 实例化模型类, 传递参数为没有前缀的数据表名称
- $ins -> Create(); // 创建数据对象
- $result = $ins -> add(); // 写入数据库
- $this -> redirect('Index/index', '', 5,'页面跳转中'); // 页面重定向
- }
- }
- ?>
- <?PHP
- header("Content-Type:text/html; charset=utf-8"); // 设置页面编码格式
- class IndexAction extends Action{
- public function index() {
- $db = new Model('user'); // 实例化模型类, 参数数据表名称, 不包含前缀
- $select = $db -> select(); // 查询数据
- $this->assign('select',$select);// 模板变量赋值
- $this->display(); // 输出模板
- }
- public function insert(){
- $ins = R("User", "insert", "Admin"); // 远程调用 admin 项目 useraction 控制器的 insert 操作方法
- $ins->Create(); // 创建数据对象
- $result = $ins->add(); // 写入数据库
- }
- }
- ?>
ThinkPHP 的模型
模型是按照某一个形状进行操作的代名词.
模型的主要作用就是封装数据库的相关逻辑.
主要内容:
模型的命名
实例化模型
属性访问
连接数据库
创建数据
连贯操作
curd 操作
实例化基础模型类
- $User = new Model('User');
- $User -> select();
- $User = M('User');
- $User -> select();
m 方法默认是实例化 model 类, 如果需要实例化其他模型类:
- $User = M('User', 'CommonModel');
- $User = new CommonModel('User');
实例化用户定义的模型类
- // 定义的模型类放到项目 lib\model 目录下面
- class UserModel extends Model{
- public function myfun() {
- // ...
- }
- }
实例化自定义模型类的方式:
- $User = new UserModel();
- $User->select(); // 进行其他的数据操作
- $User = D('User');
- $User -> select(); // 进行其他的数据操作
D 方法可以自动检测模型类, 不存在时系统会抛出异常, 同时对于实例化过的模型, 不会重复去实例化.
- $User = D('User','Admin'); // 实例化 admin 项目下面的 User 模型
- $User->select();
如果启动模块分组功能, 还能使用:
$User=D('Admin.User');
实例化空模型类
- $Model = new Model();
- // $Model = M();
- $Model -> query('SELECT *FROM think_user where status=1');
- <?PHP
- $User = new Model('User');
- $User -> find(1);
- echo $User -> name;
- $User -> name = 'ThinkPHP';
- ?>
操作方法是通过返回数组的方式:
- <?PHP
- $Type=D('Type'); // 返回的 type 数据是一个数组
- $type= $Type->find(1);
- echo $type['name']; // 获取 type 属性的值
- $type['name'] = 'ThinkPHP'; // 设置 type 属性的值
- ?>
连接数据库:
ThinkPHP 内置抽象数据库访问层, 把不同的数据库操作封装起来, 只需要使用公共的 Db 类进行操作.
- <?PHP
- return array(
- 'APP_DEBUG' => false, // 关闭调用模式
- 'DB_TYPE' => 'mysql', // 数据库类型
- 'DB_HOST' => 'localhost', // 数据库服务器地址
- 'DB_NAME' => 'db_database', // 数据库名称
- 'DB_USER' => 'root', // 数据库用户名
- 'DB_PWD' => 'root', // 数据库密码
- 'DB_PORT' => '3306'; // 数据库端口
- 'DB_PREFIX' => 'think_',
- );
- ?>
连接数据库
使用 dsn 方式在初始化 db 类的时候传参数.
- $db_dsn="mysql://root:admin@127.0.0.1:3306/db_database";// 定义 dsn
- $db = new Db();// 执行类的实例化
- $conn=$db->getInstance($db_dsn);// 连接数据库
数组传参
- $dsn = array(
- 'dbms' => 'mysql',
- 'username' => 'username',
- 'password' => 'password',
- 'hostname' => 'localhost',
- 'hostport' => '3306',
- 'database' => 'dbname'
- );
- $db = new Db();
- $conn = $db->getInstance($dsn); // 连接数据库, 返回数据库驱动类
模型类里面定义参数:
- protected $connection = array(
- 'dbms' => 'mysql',
- 'username' => 'username',
- 'password' => 'password',
- 'hostname' => 'localhost',
- 'hostport' => '3306',
- 'database' => 'dbname'
- );
- // 或者使用下面的方式:
- protected $connection = "mysql://username:password@localhost:3306/DbName";
使用 pdo 方式连接数据库:
- return array(
- 'DB_TYPE' => 'pdo',
- 'DB_DSN'=>'mysql:host=localhost;dbname=db_database',
- 'DB_USER'=>'root',
- 'DB_PWD'=>'root',
- 'DB_PREFIX'=>'think_',
- 'APP_DEBUG' => false, // 关闭调试模式
- );
自动根据表单数据创建数据对象
- class UserAction extends Action { // 定义类, 继承基础类
- public function insert() { // 定义方法
- $ins = new Model('user'); // 实例化模型类
- $ins -> Create(); // 创建数据库
- $result = $ins -> add(); // 写入数据库
- $this-> redirect('Index/index', '', 5,'页面跳转中'); // 页面重定向
- }
- }
curd 操作
ThinkPHP 提供了灵活和方便的数据库操作方法, curd 创建, 更新, 读取, 和删除.
- $User = M("User"); // 实例化对象
- $data['name'] = 'ThinkPHP';
- $data['email'] = 'ThinkPHP@gamil.com';
- $User -> add($data);
- $User->data($data)->add();
读取数据的方法:
读取字段的值使用 getField 方法
读取数据使用 find 方法
读取数据集使用 select 方法
getField 方法读取某个字段的值
- $User = M('User');
- $nickname = $User->where('id=3') -> getFielde('nickname');
- $list = $User->getField('id, nickname');
select 方法的返回值是一个二维数组, 如果没有查询到如何结果的话, 返回一个空的数组
- $User=M('User');
- $list = $User->where('status=1') -> order('create_time') -> limit(10) -> select();
find() 方法
- $User = M("User");
- $User->where('status=1 and name="think" ')->find();
- <?PHP
- header("Content-Type: text/html; charset=utf-8"); // 设置页面编码格式
- class IndexAction extends Action{
- public function index(){
- $db=M('User');
- $select = $db->where('user="mr"')->order('id desc')->limit(3)->select();
- $this->assign('select',$select); // 模板变量赋值
- $this->display(); // 指定模板页
- }
- public function insert() {
- $dba = M('User');
- $data['user'] = 'fs';
- $data['pass'] = md5('gdsoft');
- $data['address'] = 'dashu';
- $result = $dba -> add($data);
- if($result) {
- $this->redirect('Index/index', '', 2,'页面跳转中');// 页面重定向
- }
- }
- ?>
- $User = M("User");
- $data['name'] = 'ThinkPHP';
- $data['email']='ThinkPHP@mail.com';
- $User -> where('id=5') -> save('data');
- $User = M('User');
- $User -> where('id=5') -> delete();
- $User = M('User');
- $User -> where('status=0') ->order('create_time')->limit('5')->delete();
ThinkPHP 框架的特点
image.PNG
什么是 mvc?
mvc 是一种经典的程序设计理念, 分 3 部分:
模型层, 视图层, 控制层.
什么是模型层?
模型层是应用程序的核心部分, 可以是一个实体对象或一种业务逻辑.
视图层提供应用程序与用户之间的交互界面.
控制层用于对程序中的请求进行控制.
什么是 CURD?
C 为创建, U 为更新, R 为读取, D 为删除.
ThinkPHP 使用 add(),save(),select(), 和 delete()
什么是单一入口?
自动生成项目目录:
- <?PHP
- define('THINK_PATH','ThinkPHP'); // 定义 ThinkPHP 框架路径
- define('APP_NAME', '1'); // 定义项目名称
- define('APP_PATH', '.'); // 定义项目路径
- require(THINK_PATH."/ThinkPHP.php"); // 加载框架入口文件
- App::run(); // 实例化一个网站应用实例
- ?>
项目流程:
- <?PHP
- define('THINK_PATH', '../ThinkPHP/'); // 定义 ThinkPHP 框架路径
- define('APP_NAME', '2'); // 定义项目名称和路径
- define('APP_PATH', '.'); // 定义项目名称和路径
- require(THINK_PATH."/ThinkPHP.php"); // 加载框架入口文件
- App::run(); // 实例化一个网站应用实例
- ?>
config.PHP
<?PHP return array( 'APP_DEBUG' => true, // 开启调试模式 'DB_TYPE'=> 'mysql', // 数据库类型 'DB_HOST'=> 'localhost', // 数据库服务器地址 'DB_NAME'=>'db_database', // 数据库名称 'DB_USER'=>'root', // 数据库用户名 'DB_PWD'=>'rot', // 数据库密码 'DB_PORT'=>'3306', // 数据库端口 'DB_PREFIX'=>'think_', // 数据表前缀 ); ?> <?PHP class IndexAction extends Action{ public function index() { $db = new Model('user'); // 实例化模型类, 参数数据表名称, 不包含前缀 $select = $db->select(); // 查询数据 $this->assign('select',$select); // 模板变量赋值 $this->display(); // 输出模板 } } ?>
<!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> ThinkPHP 开发流程 </title> </head> <body> <!-- 循环输出查询结果数据集 --> <volist name='select' id='user'> ID:{$user.id} <br/>
用户名:{$user.user}<br/>
地址:{$user.address}<hr>
</volist> </body> </HTML>
<?PHP define('THINK_PATH', '../ThinkPHP'); // 定义 ThinkPHP 框架路径 (相对于入口文件) define('APP_NAME', '3'); // 定义项目名称 define('APP_PATH', '.'); // 定义项目路径 require(THINK_PATH."/ThinkPHP.php"); // 加载框架入口文件 App::run(); // 实例化一个网站应用实例 ?>
smarty 模板技术
什么是 smarty, 特点, 模板的安装和配置的方法, 设计方法等
<?PHP include_once("../config.php"); $arr = array('computerbook','name' => 'PHP','unit_price' => array('price' => '¥65.00','unit' => '本')); $smarty->assign('title','使用 Smarty 读取数组'); $smarty->assign('arr',$arr); $smarty->display('02/index.html'); ?> <?PHP include '../config.php'; $smarty->assign('title','Smarty 保留变量'); $smarty->display('03/index.html'); ?> <?PHP include_once '../config.php'; $smarty->display('04/index.html'); ?> <?PHP include_once "../config.php"; $smarty->assign("title","if 条件判断语句"); $smarty->display("06/index.html"); ?>
结言
好了, 欢迎在留言区留言, 与大家分享你的经验和心得.
感谢你学习今天的内容, 如果你觉得这篇文章对你有帮助的话, 也欢迎把它分享给更多的朋友, 感谢.
感谢! 承蒙关照! 您真诚的赞赏是我前进的最大动力!
image
image
来源: http://www.jianshu.com/p/66fc93a16217