Thinkphp开源框架如何使用?

Thinkphp开源框架如何使用?

成都创新互联公司成都网站建设按需规划网站,是成都网站建设公司,为成都PVC花箱提供网站建设服务,有成熟的网站定制合作流程,提供网站定制设计服务:原型图制作、网站创意设计、前端HTML5制作、后台程序开发等。成都网站设计热线:18982081108

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

Thinkphp开源框架如何使用?

其中index.php是入口文件,即所有的请求都要经过此文件才能够完成。Application 是应用目录,在开发过程中,我们手动要操作的文件都在这个文件夹中。Public是资源文件目录thinkPHP是框架目录

1,index.php入口文件

2,何为入口文件,,即所有的功能操作都要经过此文件才能够完成。

代码如下:

// 检测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文件夹没有任何模块,如图:

Thinkphp开源框架如何使用?

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

Thinkphp开源框架如何使用?

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

Thinkphp开源框架如何使用?

进入Home模块,如图

Thinkphp开源框架如何使用?

其中标记的conf,controller,model,view是我们要操作的四个文件夹

1,Conf文件夹,其中有config.Php是配置文件用来添加或修改一些配置参数2. Controller,model,view三个模块体现了mvc开发模式,view模块只负责呈现视图效果,即用户看到的网页效果,model模块就相当于是一个数据库,通过实例化model对象,我们可以随意对数据库进行操作,controller控制器是模型和视图之间连接的桥梁,从model中取出数据进行操作,然后将结果传递给视图。1模型实例化,我把她理解为链接数据库中具体的某个表。如,在TODOlist中,我建立了两个表,usermessage和listmessage,所以我建立了两个模型类。userMessageModel和listmessageModel,代码如下:

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='';

}

?>

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我定义了五个方法。方法中具体代码省略,主要先看一下架构:

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","登录");

$this->assign("link2","注册");

}else{

$logout=U('Home/Index/logout');

$changepassword=U('Home/Index/changepassword');

$planlist=U('Home/Index/planlist');

$this->assign("link1","注销");

$this->assign("link2","更改密码");

$this->assign("link3","你的列表");

}

$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

{$title}

{$bodytitle}


{$link2}


{$link3}


Register.html

登录页面

用户名:


密码:

请由字母数字或下划线组成,长度为5-21


返回首页


登录



{$error}


Login.html

登录页面

用户名:


密码:



更改密码


返回首页


注销


{$error}

{$logout}

{$error1}

Changepassword.html

更改密码页面

新密码:


登录


返回首页


{$error}


{$error1}


{$error2}

Planlist.html

计划列表

{$username}欢迎来到你的计划列表

{$message}

{$list.content}

内容:



更改密码


返回首页


注销


5.下面就以上代码中的知识点进行讲解1) URL的动态生成:利用thinkPHP内置的U方法。当我点击不同链接的时候,各个模块位置在发生变化,因此固定的路径是不可行的,路径必须是可以变化的。在控制器中,U方法用法如下:

$planlist=U('Home/Index/planlist');

$this->assign("link3","你的列表");

在模板文件中,U方法用法如下

注销

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);

模板文件中的循环输出

{$list.content}

程序员杭州软件测试杭州APP开发杭州PHP工程师


当前名称:Thinkphp开源框架如何使用?
转载注明:http://myzitong.com/article/jgcscp.html