ThinkPHP创建应用的一般开发流程及实例
Thinkphp是免费开源的php框架,提供了建站所需要的各种组件,方便用户快速建设部署网站。
Thinkphp简介:http://thinkphp.cn/Manual/16
官方完全开发手册:http://thinkphp.cn/Manual
使用 ThinkPHP 创建应用的一般开发流程是:
创建数据库和数据表;(没有数据库操作可略过)
项目命名并创建项目入口文件;
完成项目配置;(无需额外配置可以忽略)
创建控制器类;
创建模型类;(如果只是简单的模型类可以不必创建)
创建模板文件;
运行和调试。
1. 首先在数据库创建一个数据库 demo ,表 think_demo ,以 MySQL 为例
CREATE TABLE `think_demo` (
`id` int(11) unsigned NOT NULL auto_increment,
`title` varchar(255) NOT NULL default '',
`content` longtext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
2. 创建入口文件
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2009 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
// 定义 ThinkPHP 框架路径
define('THINK_PATH', '../ThinkPHP');
// 定义项目名称和路径
define('APP_NAME', 'MyApp');
define('APP_PATH', '.');
// 加载框架公共入口文件
require(THINK_PATH."/ThinkPHP.php");
// 实例化一个网站应用实例
App::run();
?>
注意, APP_PATH 的路径指的是项目目录所在路径,而不是项目入口文件所在的路径。 APP_NAME 通常都必须和项目目录名称一致。
如果你的项目入口文件放到项目目录下面的话,可以无需定义 APP_NAME 和 APP_PATH ,系统可以自动识别。THINK_PATH 通常也不是必须的。
3. 自动生成
ThinkPHP 具备项目目录自动生成功能,并且不需要使用任何命令行工具。我们只需要简单的浏览器里面访问刚才创建的应用入口文件。
打开浏览器,访问该项目的入口文件: http://127.0.0.1/Myapp/index.php
这时可以看到项目构建成功后的提示画面,并且在 Myapp 目录下,已为您构建好了项目目录。
注意: ThinkPHP 框架的所有文件都是采用 UTF-8 编码保存,但是这不影响你的项目中使用其他编码开发和浏览。请注意确保文件保存的时候去掉 UTF-8 的 BOM 头信息,防止因产生隐藏的输出而导致程序运行不正常。
注意:如果你是在 Linux 环境下,要确保项目目录的自动生成,请设置 Myapp 目录的权限为可写,否则请自行创建相关目录。然后设置 Runtime 目录为可写权限(通常都是设置目录属性为 777 )。
4. 项目配置
自动生成的项目目录下面已经为我们创建了一个空的项目配置文件,位于项目的 Conf 目录下面,名称是 config.php 。我们打开这个配置文件,加入我们的数据库配置信息。
<?php
return array(
//' 配置项 '=>' 配置值 '
'APP_DEBUG' => true, // 开启调试模式
'DB_TYPE'=> 'mysql', // 数据库类型
'DB_HOST'=> 'localhost', // 数据库服务器地址
'DB_NAME'=>'demo', // 数据库名称
'DB_USER'=>'root', // 数据库用户名
'DB_PWD'=>'123456', // 数据库密码
'DB_PORT'=>'3306', // 数据库端口
'DB_PREFIX'=>'think_', // 数据表前缀
);
?>
5. 业务逻辑
接下来,我们需要实现一个数据添加和查询操作的简单应用,来领略下 ThinkPHP 的快速开发。
在项目的 LibAction 目录下面找到自动生成的 IndexAction.class.php 文件,这个文件就是 ThinkPHP 的控制器,也就是 Index 模块的实现。删除 IndexAction 类默认生成的 index 方法。添加新的 insert 方法和 index 方法,代码如下:
public function insert() {
$Demo = new Model('Demo'); // 实例化模型类
$Demo->Create(); // 创建数据对象
$result = $Demo->add(); // 写入数据库
$this->redirect('index'); // 成功后重定向到 index 操作页面
}
public function index() {
$Demo = new Model('Demo'); // 实例化模型类
$list = $Demo->select(); // 查询数据
$this->assign('list',$list); // 模板变量赋值
$this->display(); // 输出模板
}
以上定义后, Index 模块就具有了 insert 和 index 两个操作,操作方法的定义不需要使用任何参数,而且必须定义为 public 类型,否则无法访问。
由于只是简单的数据操作应用,所以我们根本不需要创建任何的模型类也同样可以进行 CURD 操作,这就是新版的魅力所在。 ^_^
6. 模版定义
控制器和操作方法已经创建完毕,接下来就是定义模板文件了。
项目的自动生成已经为我们生成了 Tpl/default 目录,我们只需要在 default 目录下面创建 Index 目录,表示存放Index 模块的模板文件。由于 insert 操作是后台操作,并不涉及模板输出,因此不需要定义模板文件,所以我们只要为index 操作定义模板即可,内容如下:
<form method="post" action="__ URL __/insert" >
标题: <input type="text" name="title"><br />
内容: <textarea name="content" rows="5" cols="25"><textarea><br/>
<input type="submit" value=" 新增数据 ">
</form>
<volist name='list' id='vo' >
编号 :{$vo.id}<br/>
标题 :{$vo.title}<br/>
内容 :{$vo.content}<hr>
</volist>
把上面的内容保存为 Tpl/default/Index/index.html 即可。
action="/Admin/Manual/insert" 表示提交表单到当前模块的 insert 操作。
7. 运行应用
模板定义完成后,我们就可以运行应用了。我们在浏览器里面输入:
http://localhost/Myapp/ 就可以看到页面的表单输出了。
由于我们开启了调试模式,所以在页面的最下面还会看到一些额外的调试信息,并且可以很清楚的看到当前页面的请求信息和执行时间、 SQL 日志,最后还有加载的文件列表,事实上,页面 Trace 信息的显示完全是可以定制的,而这些内容不需要在模板里面定义。
在 ThinkPHP 中,我们称之为页面 Trace 信息,这是为了在开发过程中调试用的,关闭调试模式后,这些信息会自动消失。另外在调试模式下面,由于开启了日志记录,并且关闭了所有缓存,所以执行效率会有一定影响,但是关闭调试模式后,效率会有非常显著的提高。
可以尝试在页面新增数据,会看到页面下面有列表数据输出。到目前为止,我们已经完成了一个完整的数据操作应用了。
原文:http://blog.sina.com.cn/s/blog_a44e20a0010172uf.html
ThinkPHP创建应用的一般开发流程及实例的更多相关文章
- ThinkPHP创建应用的一般开发流程
使用ThinkPHP创建应用的一般开发流程是: 系统设计.创建数据库和数据表:(可选) 项目命名并创建项目入口文件,开启调试模式: 完成项目配置: 创建项目函数库:(可选) 开发项目需要的扩展(模式. ...
- Django开发流程及实例
创建虚拟环境 创建:mkvirtualenv [虚拟环境名称] 删除:rmvirtualenv [虚拟环境名称] 进入:workon [虚拟环境名称] 退出:deactivate 所有的虚拟环境,都位 ...
- FPGA开发流程(创建工程,选择芯片,变量位置,文件命名,reg和wire数据类型,开发流程)
开发流程(以二选一选择器为例) 1.设计定义:设计一个可以从两个输入端中选择其中一个并输出的逻辑电路 2.设计输入 2.1.逻辑抽象:三个输入端,一个用来选择,记sel,另两个被选择,记a,b,加上一 ...
- Linux下服务器端开发流程及相关工具介绍(C++)
去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...
- 我理解的Sitecore开发流程
Sitecore是一个强大的支持快速开发CMS建站的平台,进入sitecore后台可以看到 它主要有3个元素: 1.Templates模板 Data template:类似于面向对象编程中的类或结构体 ...
- C++的性能C#的产能?! - .Net Native 系列《二》:.NET Native开发流程详解
之前一文<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥> 获得很多朋友支持和鼓励,也更让我坚定做这项技术的推广者,希望能让更多的朋友了解这项技术,于是先从官方 ...
- git开发流程、常用命令及工具、TortoiseGit使用及常见问题
根据我最近使用git的一些经历,git是基于分支的版本控制工具,分支有远程分支和本地分支. 一.开发流程 - 从远程服务器的master,clone一份项目文件到本地,然后本地master的基础上br ...
- JNI开发流程-JNI/NDK【转】
本文转载自:http://wiki.jikexueyuan.com/project/jni-ndk-developer-guide/workflow.html 开发流程 JNI 全称是 Java Na ...
- iOS项目的目录结构和开发流程
转自无网不剩的博客 网上相关的资源不多,开源的且质量还不错的iOS项目也是少之又少,最近正好跟同事合作了一个iOS项目,来说说自己的一些想法. 目录结构 AppDelegate Models Ma ...
随机推荐
- leetcode 【 Reverse Words in a String 】python 实现
题目: Given an input string, reverse the string word by word. For example,Given s = "the sky is b ...
- LR11生成图表后修正Analysis中显示请求的地址长度过短50个字符的问题
在LR11的安装目录下找到LRAnalysis80.ini文件,在其中的[WPB]下添加SURLSize=255内容. 其次还需要修改LR目录下loader2.mdb文件,将其中的Breakdown_ ...
- startActivityForResult用法
使用场景:A界面(activity) 可跳转到一个(假设为 B)或多个子Activity,要求B处理完工作之后返回A 界面,或许同时返回一些数据交给A继续处理.如 由登陆界面A跳转到注册界面B,注册成 ...
- STL之string使用简介
声明一个C++字符串 string类的构造函数和析构函数如下: string s; //生成一个空字符串s string s(str) //拷贝构造函数 生成str的复制品 string s(str, ...
- 微信小程序--列表渲染
HTML: <view class="content" wx:for="{{oneList}}" wx:key = "id" bind ...
- 导入goshop2(复制自己看)
1.goshop2采用了分布式的架构,很好的使用dubbo集成了服务.导入goshop2需要注意的事项如下: 1.1基本模块的架构: goshop-common开头的为项目的通用配置 goshop-s ...
- HDU3018 几笔画(非1笔)
Ant Trip Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- BZOJ2121 字符串游戏 【dp】
题目链接 BZOJ2121 题解 dp怎么那么神呐QAQ 我们要求出最小字符串长度 我们设一个\(dp[i]\)表示前\(i\)个字符最后所形成的最短字符串长度 对于第\(i\)个字符,要么保留,就是 ...
- Nginx ServerName 配置说明(转)
Nginx强大的正则表达式支持,可以使server_name的配置变得很灵活,如果你要做多用户博客,那么每个用户拥有自己的二级域名也就很容易实现了. 下面我就来说说server_name的使用吧: s ...
- PowerDesigner反向生成数据库模型(MySql篇)
目录: 数据库的反向生成模型 模型的Cooment注释显示 步骤一:下载odbc驱动并进行安装: (1)下载 mysql-connector-odbc-5.3.4-win32 注意:不管电脑是32位, ...