zoukankan      html  css  js  c++  java
  • 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 HomeModel;

      use ThinkModel;

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

      use ThinkModel;

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

      use ThinkController;

      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>

    PHP是世界上最好的语言
  • 相关阅读:
    java面试题之简单介绍一下集合框架
    java面试题之hashcode相等两个类一定相等吗?equals呢?相反呢?
    java面试题之什么是ThreadLocal?底层如何实现的?
    java面试题之stop()和suspend()方法为何不不推荐使⽤?
    设计模式—单例模式
    Java并发—同步容器和并发容器
    Java并发—并发工具类
    Java并发—原子类,java.util.concurrent.atomic包(转载)
    Java并发—java.util.concurrent.locks包
    Java并发—java.util.concurrent并发包概括(转载)
  • 原文地址:https://www.cnblogs.com/proginn/p/5601025.html
Copyright © 2011-2022 走看看