Thinkphp开源框架如何使用?

(一)首先是准备工作下载thinkPHP框架最新版本,解压缩到你将要开发的项目位置。杭州php操作演示如图:

其中index.php是入口文件,即所有的请求都要经过此文件才能够完成。Application 是应用目录,在开发过程中,我们手动要操作的文件都在这个文件夹中。Public是资源文件目录thinkPHP是框架目录
1,index.php入口文件
2,何为入口文件,,即所有的功能操作都要经过此文件才能够完成。
代码如下:
<?php
// 检测PHP环境
if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !');
// 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false
define('APP_DEBUG',True);
// 定义应用目录
define('APP_PATH','./Application/');
// 引入ThinkPHP入口文件
require 'D:/Dev Apps/xampp/htdocs/sunyan2015/017/ThinkPHP/ThinkPHP.php';
// 亲^_^ 后面不需要任何代码了 就是如此简单
1,从上述代码中 可以看出入口文件主要完成:
2,载入thinkPHP框架入口文件
3,定义系统相关常量
4,定义项目路径
5,定义调试模式和应用模式在第一次访问入口文件之前,application文件夹没有任何模块,如图:

现在我们访问入口文件,在浏览器中效果如下

此时,application文件夹就自动生成了相应模块如图

进入Home模块,如图

其中标记的conf,controller,model,view是我们要操作的四个文件夹
1,Conf文件夹,其中有config.Php是配置文件用来添加或修改一些配置参数2. Controller,model,view三个模块体现了mvc开发模式,view模块只负责呈现视图效果,即用户看到的网页效果,model模块就相当于是一个数据库,通过实例化model对象,我们可以随意对数据库进行操作,controller控制器是模型和视图之间连接的桥梁,从model中取出数据进行操作,然后将结果传递给视图。1模型实例化,我把她理解为链接数据库中具体的某个表。如,在TODOlist中,我建立了两个表,usermessage和listmessage,所以我建立了两个模型类。userMessageModel和listmessageModel,代码如下:
<?php
namespace Home\Model;
use Think\Model;
class usermessageModel extends Model{
protected $connection=array(
'DB_TYPE'=>'mysql',
'DB_USER'=>'root',
'DB_PWD'=>'123456',
'DB_HOST'=>'localhost',
'DB_PORT'=>'3306',
'DB_NAME'=>'todolist',
'DB_CHARSET'=>'utf8',
'DB_PREFIX'=>' ',
);
protected $tablePrefix='';
}
?>
<?php
namespace Home\Model;
use Think\Model;
class listmessageModel extends Model{
protected $connection=array(
'DB_TYPE'=>'mysql',
'DB_USER'=>'root',
'DB_PWD'=>'123456',
'DB_HOST'=>'localhost',
'DB_PORT'=>'3306',
'DB_NAME'=>'todolist',
'DB_CHARSET'=>'utf8',
'DB_PREFIX'=>' ',
);
protected $tablePrefix='';
}
?>
其中$connection数组定义的是数据库链接信息,$tablePrefix定义的是标的前缀为空。
3. 控制器,其实就是一个类,由方法组成。如TODOlist我定义了五个方法。方法中具体代码省略,主要先看一下架构:
<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public function index(){
}
public function register(){
}
public function login(){
}
public function logout(){
}
public function planlist(){
}
}
?>
在view模块中,一个控制器(一个类),对应一个文件夹,文件夹的名称为类的名称,此类的名称为Index,则文件夹的名称为Index,然后在此文件夹中,每个方法对应一个html文件,这是方法的模板文件。如index方法对应index.html模板文件。
4.
public function index(){
$title="欢迎页面";
$bodytitle="欢迎访问todolist";
$this->assign("bodytitle","$bodytitle");
$username=session("username");
if(empty($username)){
$login=U('Home/Index/login');
$register=U('Home/Index/register');
$this->assign("link1","<a href=\"$login\">登录</a>");
$this->assign("link2","<a href=\"$register\">注册</a>");
}else{
$logout=U('Home/Index/logout');
$changepassword=U('Home/Index/changepassword');
$planlist=U('Home/Index/planlist');
$this->assign("link1","<a href=\"$logout\">注销</a>");
$this->assign("link2","<a href=\"$changepassword\">更改密码</a>");
$this->assign("link3","<a href=\"$planlist\">你的列表</a>");
}
$this->display();
}
public function register(){
$user=D("usermessage");
$error=array();
if($_SERVER['REQUEST_METHOD']=='POST'){
if(!empty($_POST['username'])){
$data['name']=$_POST['username'];
}else{
$error[]="请输入用户名";
}
if(!empty($_POST['password'])){
$data['password']=$_POST['password'];
}else{
$error[]="请输入密码";
}
if(empty($error)){
$r=$user->where("name='{$data['name']}'")->select();
if(empty($r)){
$r1=$user->add($data);
if($r1){
$this->assign("error","恭喜你,注册成功");
}else{
$this->assign("error","系统正忙,请重新注册");
}
}else{
$this->assign("error","对不起,此用户名已经注册");
}
}else{
foreach($error as $msg){
$this->assign("error","$msg");
}
}
}
$this->display();
}
public function login(){
$user=D("usermessage");
$user->create();
$error=array();
if($_SERVER['REQUEST_METHOD']=='POST'){
if(!empty($_POST['username'])){
$username=$_POST['username'];
}else{
$error[]="请输入用户名";
}
if(!empty($_POST['password'])){
$password=$_POST['password'];
}else{
$error[]="请输入密码";
}
if(empty($error)){
$r=$user->where("name='$username'")->select();
if(!empty($r)){
$r1=$user->where("name='$username' and password='$password'")->find();
if(!empty($r1)){
$this->assign("error","登录成功");
$this->assign("error1","{$r1['user_id']}");
session("username","$username");
session('user_id',$r1['user_id']);
} else{
$this->assign("error","密码错误,请重新输入");
}
}else{
$this->assign("error","对不起,此用户名并未注册");
}
}else{
foreach($error as $msg){
$this->assign("error","$msg");
}
}
}
$this->display();
}
public function logout(){
$username=session('username');
if(!empty($username)){
session(null);
$username=session('username');
if(empty($username)){
$this->assign('logout','注销成功');
}else{
$this->assign('logout','注销失败');
}
}else{
$this->assign('logout','您还没有登录');
}
$this->display(login);
}
public function changepassword(){
$error=array();
$user=D('usermessage');
$username=session('username');
$user_id=session('user_id');
if(!empty($username)){
if($_SERVER['REQUEST_METHOD']=='POST'){
if(!empty($_POST['newpassword'])){
$data['password']=$_POST['newpassword'];
//$user->password==$_POST['newpassword'];
}else{
$error[]="请输入密码";
}
if(empty($error)){
$r=$user->where("user_id='$user_id'")->save($data);
$this->assign("error2","$r");
if($r){
$this->assign("error","恭喜你,密码更改成功");
}else{
$this->assign("error","系统正忙,请重新更改密码");
}
}else{
foreach($error as $msg){
$this->assign("error","$msg");
}
}
}
}else{
$this->assign('error','请先登录');
}
$this->display();
}
public function planlist(){
$username=session('username');
$user_id=session("user_id");
$this->assign("username","$username");
//$user=D("usermessage");
$list=D("listmessage");
$list->create();
if($_SERVER['REQUEST_METHOD']=='POST'){
if($_POST['orderhidden']=='a'){
if(!empty($_POST['content'])){
$data['content']=$_POST['content'];
$data['user_id']=$user_id;
$r=$list->add($data);
if($r){
$this->assign("message","添加成功");
}else{
$this->assign("message","添加失败");
}
}else{
$this->assign("message","请输入内容");
}
}
if($_POST['orderhidden']=='b'){
$list_id=$_POST['listhidden'];
$r=$list->where("list_id='$list_id'")->delete();
if($r){
$this->assign("message","删除成功");
}else{
$this->assign("message","请重新点击删除");
}
}
}
$r=$list->field("content,list_id")->where("user_id='$user_id'")->select();
/*if(!empty($r)){
$num++;
}
$this->assign("num",$num);*/
$this->assign("select",$r);
$this->display();
}
他的模板文件index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>{$title}</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<h1>{$bodytitle}</h1>
<!--<a href="{:U('Home/Index/login')}" >登录</a>-->
</br>
<!--<a href="{:U('Home/Index/register')}" >注册</a>-->
{$link2}
</br>
{$link3}
</br>
</body>
</html>
Register.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>登录页面</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="deion" content="布尔教育 http://www.itbool.com" />
</head>
<body>
<form action="register" method="POST">
用户名:<br />
<input type="text" name="username" />
<br />
密码:<br />
<input type="password" name="password" />
请由字母数字或下划线组成,长度为5-21
<br />
<input type="submit" value="注册" />
<input type="reset" value="重置">
</form>
<a href="{:U('Home/Index/index')}">返回首页</a>
<br/>
<a href="{:U('Home/Index/login')}">登录</a>
</br>
</br>
{$error}
</br>
</body>
</html>
Login.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>登录页面</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="deion" content="布尔教育 http://www.itbool.com" />
</head>
<body>
<form action="login" method="POST">
用户名:<br />
<input type="text" name="username" />
<br />
密码:<br />
<input type="password" name="password" />
<br />
<input type="submit" value="登录" />
</br>
<input type="reset" value="重置">
</form>
<a href="{:U('Home/Index/changepassword')}">更改密码</a>
<br />
<a href="{:U('Home/Index/index')}">返回首页</a>
</br>
<a href="{:U('Home/Index/logout')}">注销</a>
</br>
{$error}
{$logout}
{$error1}
</html>
Changepassword.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>更改密码页面</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="deion" content="布尔教育 http://www.itbool.com" />
</head>
<body>
<form action="changepassword" method="POST">
新密码:<input type="password" name="newpassword" />
<br />
<input type="submit" value="确定更改" />
<input type="reset" value="重置" />
</form>
<a href="{:U('Index/login')}">登录</a>
<br />
<a href="{:U('Index/index')}">返回首页</a>
</br>
{$error}
</br>
{$error1}
</br>
{$error2}
</body>
</html>
Planlist.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>计划列表</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="deion" content="布尔教育 http://www.itbool.com" />
</head>
<body>
<h2>{$username}欢迎来到你的计划列表</h2>
{$message}
<table border=3>
<foreach name="select" item="list">
<tr>
<td>
{$list.content}
<form action="planlist" method="POST">
<input type="hidden" name="listhidden" value="{$list.list_id}" />
<input type="hidden" name="orderhidden" value="b" />
<input type="submit" value="删除" />
</form>
</td>
</tr>
</foreach>
<tr>
<td>
<form action="planlist" method="POST">
内容:<textarea name="content" cols="30" rows="3"></textarea>
<br />
<input type="submit" value="添加" />
<input type="hidden" name="orderhidden" value="a" />
</form>
</td>
</tr>
</table>
</br>
<a href="{:U('Home/Index/changepassword')}">更改密码</a>
<br />
<a href="{:U('Home/Index/index')}">返回首页</a>
</br>
<a href="{:U('Home/Index/logout')}">注销</a>
</br>
</body>
</html>
5.下面就以上代码中的知识点进行讲解1) URL的动态生成:利用thinkPHP内置的U方法。当我点击不同链接的时候,各个模块位置在发生变化,因此固定的路径是不可行的,路径必须是可以变化的。在控制器中,U方法用法如下:
$planlist=U('Home/Index/planlist');
$this->assign("link3","<a href=\"$planlist\">你的列表</a>");
在模板文件中,U方法用法如下
<a href="{:U('Home/Index/logout')}">注销</a>
1,概括一下为U(模块/控制器/方法),若省略模块名,则默认为当前模块名称
2,实例化模型类:用D方法或者M方法
$user=D("usermessage");
$list=D("listmessage");
3)CURD操作和连贯操作方法
(1 )create方法:用于创建数据对象,最典型的应用就是自动根据表单数据创建数据对象,但数据对象是保存在内存中的,并没有实际写入到数据库中,知道使用add或save方法
(2)save方法:
$user->where("user_id='$user_id'")->save($data);
返回值是影响的记录行数
返回值是自动增长的主键,即一个整型数据
(3)select方法:用于数据读取,即获取数据表中的多行记录,
$user->where("name='{$data['name']}'")->select();
若查询出错,返回值是false,若查询结果为空,则返回null,否则返回二维数组
(4)delete方法:用于数据删除
$list->where("list_id='$list_id'")->delete();
返回值是删除的记录行数
这四个操作称为CURD操作,是对数据库的基本操作
(5)data方法:用于设置当前要操作的数据对象的值
$data['password']=$_POST['password'];
(6)add方法用于数据写入
$user->add($data);
(7)where方法,主要用于添加数据库操作的限制条件
$user->where("user_id='$user_id'")->save($data);
$r1=$user->where("name='$username' and password='$password'")->find();
(8)field方法:选择要返回或操作的字段
$list->field("content,list_id")->where("user_id='$user_id'")->select();
4) session的设置与删除
session("username","$username");
session('user_id',$r1['user_id']);
session(null);
5)模板文件:thinkphp内置了一个基于XML的模板引擎thinktemplate,,在变量输出和制定模板文件时,与smarty模板引擎相同
$this->assign()
$this->display()
我还用到了一个循环标签foreach ,用于计划列表的输出
方法中的变量输出:$this->assign("select",$r);
模板文件中的循环输出
<foreach name="select" item="list">
<tr>
<td>
{$list.content}
<form action="planlist" method="POST">
<input type="hidden" name="listhidden" value="{$list.list_id}" />
<input type="hidden" name="orderhidden" value="b" />
<input type="submit" value="删除" />
</form>
</td>
</tr>
Thinkphp开源框架如何使用?的更多相关文章
- Android 开源框架Universal-Image-Loader学习
Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用 Android 开源框架Universal-Image-Loader完全解析(二)--- 图片 ...
- iOS常用第三方开源框架和优秀开发者博客等
博客收藏iOS开发过程好的开源框架.开源项目.Xcode工具插件.Mac软件.文章等,会不断更新维护,希望对你们有帮助.如果有推荐或者建议,请到此处提交推荐或者联系我. 该文档已提交GitHub,点击 ...
- 值得推荐的android开源框架
1.volley 项目地址https://github.com/smanikandan14/Volley-demo (1) JSON,图像等的异步下载: (2) 网络请求的排序(scheduling) ...
- 介绍一个非常好用的跨平台C++开源框架:openFrameworks
介绍一个非常好用的跨平台C++开源框架:openFrameworks 简介 首先需要说明的一点是: openFrameworks 设计的初衷不是为计算机专业人士准备的, 而是为艺术专业人士准备的, 就 ...
- iOS超全开源框架、项目和学习资料汇总(5)AppleWatch、经典博客、三方开源总结篇
完整项目 v2ex – v2ex 的客户端,新闻.论坛.apps-ios-wikipedia – apps-ios-wikipedia 客户端.jetstream-ios – 一款 Uber 的 MV ...
- Android开源框架:NineOldAndroid
在android3.0以前的版本,要实现动画,一般是使用NineOldAndroid开源框架,之后,就可以直接使用android提供的animation API了. 仔细看过此开源框架后,可看出此框架 ...
- 【python】15个最受欢迎的Python开源框架
Django: Python Web应用开发框架 Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响.Django是走大而全的方向,它最出名的是其全自动化的管理后台: ...
- 10个顶级的CSS UI开源框架
随着CSS3和HTML5的流行,我们的WEB页面不仅需要更人性化的设计理念,而且需要更酷的页面特效和用户体验.作为开发者,我们需要了解一些宝贵的CSS UI开源框架资源,它们可以帮助我们更快更好地实现 ...
- Pyhton开源框架(加强版)
info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...
随机推荐
- Java范式1
package Xwxx; public class Person { private String name; private int age; public Person() { } public ...
- Java Mybatis 缓存介绍
0 引言 本文主要介绍有关MyBatis的缓存. 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 1. 一级缓存: 基于PerpetualCache 的 HashMap本 ...
- MySQL py模块的链接Navicat可视化工具
数据库可视化工具Navicat 1 基本操作: 1 库 表 字段 记录(增删改查) 2 添加主建,添加自增. 3 添加外键,外键的链接 4 模型建表,模型添加外键.(逆向数据库到模型,运行SQL文件 ...
- 【BZOJ1367】【Baltic2004】sequence - 可合并堆
题意: 题解: 其实这是道水题啦……只不过我没做过而已 先考虑构造不严格递增序列,考虑原序列中的一段下降区间,显然区间中的$z$全取中位数最优: 那么可以把原序列拆成很多个下降序列,从头到尾加入原序列 ...
- 1520dc更新与NUll语句用法
update dbo.dc_出租信息set 出租类型 = 1where 出租类型='普通楼上房' update dbo.dc_出租信息set 朝向 = 5where 朝向 is NULL
- NOIP2018提高组省一冲奖班模测训练(五)
NOIP2018提高组省一冲奖班模测训练(五) http://www.51nod.com/Contest/ContestDescription.html#!#contestId=79 今天有点浪…… ...
- 一个关于 UIPickerView 的 bug
首先,我下描写叙述一下bug的发生情况: 在使用UIPickerView实现选择城市的时候.出现这样一个Bug 1.在iOS 6的系统上 2.Picker的数据上省份一栏选择了"香港&quo ...
- mysql基础综述(四)
1.数据库的简单介绍 1.1 数据库,就是一个文件系统,使用标准sql对数据库进行操作 1.2 常见的数据库 oracle 是oracle公司的数据库,是一个收费的大型的数据库 DB2,是IBM公司 ...
- UML中的序列图(时序图)
序列图将交互关系表示为一个二维图.纵向是时间轴,时间沿竖线向下延伸. 横向轴代表了在协作中各独立对象的类元角色.类元角色用生命线表示.当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时.生命 ...
- Hbase集群扩展
当hbase集群节点不够用时,我们须要新增节点来对集群进行扩展.hbase集群的扩展是非常easy的,过程例如以下: 一.准备一台新机器作为扩展节点,这里是作为slaves15,该机子要先与maste ...