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是世界上最好的语言
  • 相关阅读:
    字符串 CSV解析 表格 逗号分隔值 通讯录 电话簿 MD
    Context Application 使用总结 MD
    RxJava RxPermissions 动态权限 简介 原理 案例 MD
    Luban 鲁班 图片压缩 MD
    FileProvider N 7.0 升级 安装APK 选择文件 拍照 临时权限 MD
    组件化 得到 DDComponent JIMU 模块 插件 MD
    gradlew 命令行 build 调试 构建错误 Manifest merger failed MD
    protobuf Protocol Buffers 简介 案例 MD
    ORM数据库框架 SQLite 常用数据库框架比较 MD
    [工具配置]requirejs 多页面,多入口js文件打包总结
  • 原文地址:https://www.cnblogs.com/proginn/p/5601025.html
Copyright © 2011-2022 走看看