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框架的特点

什么是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");
?>

thinkphp概述2的更多相关文章

  1. thinkphp概述

    thinkphp框架是一个免费的,开源,快速,简单的面向对象的轻量级PHP开发框架. 了解什么是thinkphp概述,thinkphp项目目录结构,thinkphp的控制器,视图,thinkphp项目 ...

  2. PHP全栈学习笔记19

    thinkphp框架是一个免费的,开源,快速,简单的面向对象的轻量级PHP开发框架. 了解什么是thinkphp概述,thinkphp项目目录结构,thinkphp的控制器,视图,thinkphp项目 ...

  3. PHP全栈学习笔记20

    thinkphp概述,thinkphp项目构建流程,thinkphp项目结构,thinkphp配置,thinkphp控制器,thinkphp模型,thinkphp视图,thinkphp的内置模板引擎. ...

  4. ThinkPHP框架概述

    框架概述 1.什么是框架 框架,即framework.其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统. 2.框架的应用场景 ① 代码重用 ② 合理分工 ③ 解决团队协作开发问题 3. ...

  5. ThinkPHP实现跨模块调用操作方法概述

    ThinkPHP实现跨模块调用操作方法概述 投稿:shichen2014 字体:[增加 减小] 类型:转载   使用 $this 可以调用当前模块内的方法,但是很多情况下经常会在当前模块中调用其他模块 ...

  6. Redis在windows环境下ThinkPHP的安装和使用

    1.Redis概述: 2.Redis在windows环境下的安装: 下载地址:https://github.com/dmajkic/redis/downloads,选取其中一个zip压缩包:

  7. thinkphp框架中“关联操作”的完整定义详解

    在复杂的关联操作中,如果要给关联定义增加可选的属性,我们可以采用完整定义的方式. 完整定义的格式是: protected $_link = array(     '关联表名1'  =>  arr ...

  8. ThinkPHP 3.2.3 简单后台模块开发(一)常用配置

    一.项目分组 下载解压 ThinkPHP 3.2.3,在默认的应用 Application(./Application) 中,包含一个默认的模块 Home(./Application/Home). 需 ...

  9. thinkphp中I方法

    概述 正如你所见到的一样,I方法是ThinkPHP众多单字母函数中的新成员,其命名来自于英文Input(输入),主要用于更加方便和安全的获取系统输入变量,可以用于任何地方,用法格式如下:I('变量类型 ...

随机推荐

  1. UnicodeEncodeError: 'latin-1' codec can't encode characters,python3 中文乱码

    UnicodeEncodeError: 'latin-1' codec can't encode characters in position 9-13: ordinal not in range(2 ...

  2. xmlns:amq="http://activemq.apache.org/schema/core"报错

    如题,项目集成ActiveMQ是配置文件报错 原因是:Spring命名空间配置错误,缺少相应的spring-bean.很显然,引用不到就是没有jar包啊. 我的解决办法,早pom.xml引用依赖 &l ...

  3. Laya的滚动容器

    想实现一个简单的滚动容器.例如水平排列10个图标,可以左右滑动查看的. Egret里有布局容器可以滚动 Laya看了教程和示例,没有找到一个滚动容器,只有一个list,需要设置item,显然不是我想要 ...

  4. EasyNVR摄像机网页Chrome无插件视频播放功能二次开发之通道配置文件上传下载示例代码

    背景需求 熟悉EasyNVR产品的朋友们都知道,产品设计初期根据整个直播流程层级,我们将EasyNVR无插件直播系统划分为:硬件层.能力层.应用层,连接硬件与应用之间的桥梁,同时屏蔽各种厂家硬件的不同 ...

  5. js中 这些值是false

  6. keepalived双主虚拟路由配置

    我使用了两台虚拟机做测试 系统centos7.3 主机A:172.16.1.123 主机B:172.16.1.124 其实和普通配置keepalived差不多,就是复制多了一个vrrp_instanc ...

  7. 使用ObjectARX 2012向导生成的自定义实体类无法捕捉的问题解决方式

    使用ObjectARX 2012自定实体向导的时候,获取捕捉点的重写函数的向导中模板有点问题, C:\Program Files (x86)\Autodesk\ObjectARX 2019 Wizar ...

  8. VMware的包格式vmdk转换为virtualBox的ova

    使用winxp的vmdk作为案例 1 使用vmvare导入vmdk的winxp,点击文件---->导出为ovf 2 找到生成的ovf文件 3 打开virtualBox 管理---->导入虚 ...

  9. 湖南省第6届程序大赛 Repairing a Road

    Problem G Repairing a Road You live in a small town with R bidirectional roads connecting C crossing ...

  10. php利用crontab执行 5分钟发邮件给用户 (包含每分钟发一次)

    php利用crontab执行 5分钟发邮件给用户 一开始设想用shell_exec执行sh 运行 crontab但发现并不可取 因为没办法传变量 (因为要传963529987@qq.com)所以决定采 ...