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. nginx反向代理结合apache和php的配置示例

    .前端nginx主配置文件 # cat nginx.conf worker_processes ; #pid logs/nginx.pid; pid /data/www/logs/nginx.pid; ...

  2. 【翻译】Flink Table Api & SQL — Catalog Beta 版

    本文翻译自官网:Catalogs Beta  https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/catalog ...

  3. tensorflow2.0手写数字识别

    import tensorflow as tf import matplotlib.pyplot as plt import numpy as np datapath = r'D:\data\ml\m ...

  4. js中 这些值是false

  5. [LeetCode] 351. Android Unlock Patterns 安卓解锁模式

    Given an Android 3x3 key lock screen and two integers m and n, where 1 ≤ m ≤ n ≤ 9, count the total ...

  6. Lyrics of the song 99 Bottles of Beer

    99 bottles of beer on the wall, 99 bottles of beer.Take one down and pass it around, 98 bottles of b ...

  7. 日志收集系统ELK搭建

    一.ELK简介 在传统项目中,如果在生产环境中,有多台不同的服务器集群,如果生产环境需要通过日志定位项目的Bug的话,需要在每台节点上使用传统的命令方式查询,这样效率非常低下.因此我们需要集中化的管理 ...

  8. redis使用bit做只有两种情况的“状态“统计(如是否在线的用户统计)

    1 记录在线用户数(活跃用户)? 比如redis中键a的value数据的二进制码是 0110 0110 0001 它总共有12位,在redis的位操作中,二进制中的第几位称为offset. 我们可以这 ...

  9. [转帖]Redis、Memcache和MongoDB的区别

    Redis.Memcache和MongoDB的区别 https://www.cnblogs.com/tuyile006/p/6382062.html >>Memcached Memcach ...

  10. Javascript获取JSON对象长度