zoukankan      html  css  js  c++  java
  • 小谈ThinkPHP

        ThinkPHP也是一个MVC框架,分视图、控制器和模型,和Yii框架相比相对较好理解,并且是轻量级的框架(相对于Yii来说),在使用Yii框架时候如果将框架放在项目文件中,用编辑器打开文件都比较慢,亲身的体会。TP代码也分工明确,便于网站的维护和管理。现在也有很多公司在用这个框架。

         一、TP的目录结构

    library----------------第三方资源包

        ThinkPHP

        jquery

        kindeditor

    application------------应用程序

        Common---------------全局公用函数

        Home

          Common-------------局部公用函数

          Conf---------------配置文件

            config.php

          Controller---------控制器

          Model--------------模型

          View---------------视图

       Admin

          Common-------------局部公用函数

          Conf---------------配置文件

            config.php

          Controller---------控制器

          Model--------------模型

          View---------------视图

      Runtime--------------运行时(临时文件)

      public-----------------公用文件

        images

        css

     index.php

     admin.php     (目录大致是这样的)

         二、命名空间:虚拟的文件夹

    1、定义命名空间

       namespace 空间名;

       namespace hello;

       namespace hello\aaa\bbb;

       注意:namespace必须出现在整个页面的第一行

    2、导入指定空间下的类

       use 空间名\类名;

       use hello\Person;//导入hello空间下的Person类

       use hello\aaa\Person;//导入hello\aaa下的Person类

    作用:解决类的重名问题

    注意:命名空间到php5.3的时候,才引入

          三、入口文件

    <?php
      header(...);
      //指定绑定的模块名
      define("BIND_MODULE","模块名");
      //指定应用程序目录
      define("APP_PATH","application/");
      //开启调试模式
      define("APP_DEBUG",true);
      //开启或关闭目录安全。开启后是在每个目录中生成一个空白的index.html文件
      define("BUILD_DIR_SECURE",false);
      //包含ThinkPHP入口文件
      include_once 'library/ThinkPHP/ThinkPHP.php';
    ?>

         注意:

             1、每个控制器必须有自己的命名空间

                 namespace 模块名\Controller;

             2、每个模型必须有自己的命名空间

                  namespace 模块名\Model;

             3、导入一些命名空间

                 1)控制器与模型的父类

                   namespace Think;

                  library/ThinkPHP/Library/Think/Controller.class.php

                  namespace Think;

                   library/ThinkPHP/Library/Think/Model.class.php

                2)导入指定空间下的类

                  use Think\Controller;

                  use Think\Model;

       四、命名规则

          .控制器的命名规则

    1、必须采用大驼峰的命名规则

    2、必须以Controller.class.php来结尾

    IndexController.class.php

    LoginController.class.php

    NewsController.class.php

    ReviewsController.class.php

         控制器中方法的命名

    1、必须采用小驼峰的命名规则

    index()

    add()

    insert()

    login()

     示例:

    <?php
      namespace Home\Controller;
      use Think\Controller;
    
      class XxxController extends Controller
      {
         public function 方法()
         {
        //逻辑代码;
        $this->assign(key,value);
        $this->assign(key,value);
        $this->assign(key,value);
        $this->display();
         }
      }
    ?>

      

    模型的命名规则

    1、必须采用大驼峰的命名规则

    2、必须以表名来命名

    3、必须以Model.class.php来结尾

    ReviewsModel.class.php

    BbsInfoModel.class.php

    示例:

    <?php
      namespace Home\Model;//定义命名空间
      use Think\Model;//导入父类
      class XxxModel extends Model
      {
         public $tableName = "省略了前缀的表名";
         public $trueTableName = "完整的表名";
      }
    ?>

          五、Think标签

              特点:

    1、标签定界符:{}、<>

       注意:只有输出值的标签用的是{},其他的都用的是<>

    2、所有<>标签,必须都是双标签

       <标签></标签>

       <标签 />

    3、assign方法传过来的key名,有的加$,有的不加$

       注意:只有输出值、if标签加$,其他的都不加$

          标签:

    1、显示变量值

       {$key}

    2、显示数组中的某一个值

       {$key.下标}

       {$key[下标]}

    3、if标签

       <if condition="条件">

         内容

       <elseif condition="条件"/>

         内容

       <elseif condition="条件"/>

         内容

       <else/>

         内容

       </if>

    4、比较标签

       == eq

       !=           neq

       ===          heq

       !==          nheq

       <            lt

       <= elt

       > gt

       >=       egt

    5、switch标签

       <switch name="key">

         <case value="值1">内容</case>

         <case value="值2">内容</case>

         <case value="值3">内容</case>

         <default/>内容

       </switch>

    6、for标签

       <for start="起始值" end="结束值" name="循环变量名">

         内容,循环变量:{$i}

       </for>

    7、foreach标签

       <foreach name="key" key="k" item="v">

           下标:{$k}    值:{$v}

       </foreach>

    8、volist标签

       <volist name="key" key="k" id="v">//k是序号而不是键名称

          序号:{$k}   值:{$v}

       </volist>

    9、原样显示

       <literal>

         Think标签

       </literal>

    10、php标签

       <php>

         php代码;

         php代码;

         php代码;

       </php>

    11、包含html文件

       <include file="xxxx"/>

       <include file="文件夹:文件名"/>

       例子:

       View

         Login

           hello.html

       <include file="Login:hello"/>

     六、ThinkPHP配置文件

    1、当前模块目录的配置文件

       application/Home/Conf/config.php

       application/Admin/Conf/config.php

    2、全局配置文件

       application/Common/Conf/config.php

    3、全局配置文件

       library/ThinkPHP/Conf/convention.php

    配置文件优先级排列顺序:

    模块下的配置文件 > application/Common/Conf/config.php > tp资源包中的配置文件

    建议:

    1、不要修改convention.php配置文件

    2、application/Common/Conf/config.php

       前后、后台管理都一样的配置信息,写在这里

    3、模块下的配置文件

       存放的都是当前模块独立的配置信息

        七、url访问方式(url路由)

    1、问号传参

       http://localhost/项目/index.php 

       http://localhost/项目/index.php?c=控制器&a=方法

       http://localhost/项目/index.php?c=控制器&a=方法&名=值

       ----------

       <a href="index.php?c=控制器&a=方法"></a>

       <img src="public/images/xxx.jpg">

       <link href="public/css/xxx.css">

       <script src="library/jquery/jquery-1.4.js">

    2、pathinfo模式

       http://localhost/项目/index.php

       http://localhost/项目/index.php/控制器/方法.html

       http://localhost/项目/index.php/控制器/方法/名/值.html

       ----------

       <a href="入口文件地址/控制器/方法/名/值.html"></a>

       <img src="根目录地址/public/images/xxx.jpg">

       <link  href="根目录地址/public/css/xxx.css">

       <script src="根目录地址/library/jquery/jquery-1.4.js">

    3.

                   (1)、通过传统的$_GET方法来获得

                        $变量 = $_GET["参数名"];

                   (2)、给方法加参数

                    public function 方法名($参数名,$参数名...)

                    {}

                   注意:

                    1)方法中的参数名必须与url中的参数名相同

                    2)方法中的参数的个数、顺序必须与url中的参数相同

                       (参数的名称、个数、顺序必须全部相同)

             八、ThinkPHP系统常量

                  1、获得入口文件地址:链接地址、跳转地址

                      __APP__

                  2、获得根目录地址:css、image、library

                      __ROOT__

            九、ThinkPHP页面重定向

    1、跳转页面

       $this->redirect("控制器/方法");

    2、跳转页面,并url传参

       $this->redirect("控制器/方法",array(名=>值,名=>值));

    3、跳转页面,并提示信息

       $this->redirect("控制器/方法",array(),时间,信息);

       $this->redirect("控制器/方法",NULL,时间,信息);

           十、自定义success页面

    1、在View\Public下新建一个success页面(自定义的提示信息页面)

    2、控制器中通过$this->success()、$this->error()来调用

       $message:提示信息、$jumpUrl:跳转地址

    3、修改配置文件,设置提示信息页面的路径

       'TMPL_ACTION_ERROR'  =>  'Public:success', // 默认错误跳转对应的模板文件

       'TMPL_ACTION_SUCCESS'=>  'Public:success', // 默认成功跳转对应的模板文件

     十一、ThinkPHP中获得模型对象的方法

    1、$model = D("模型文件名");//必须新建模型文件

    2、$model = D("表名");//不用新建模型文件

    2、$model = M("表名");//不用新建模型文件

    注意:表名最好是全部小写

          M("bbsInfo")或D("bbsInfo")--->表名:bbs_info

            十二、数据库操作

    1、查询多条记录,返回:二维数组

       $result = $model->select();

       $result = $model->where()->select();

       $result = $model->order()->select();

       $result = $model->limit()->select();

       $result = $model->where()->order()->limit()->select();

    2、删除记录,返回:受影响的行数

       $result = $model->delete();

       $result = $model->where()->delete();

    3、查询一条记录,返回:一维关联数组

       $result = $model->find();

       $result = $model->where()->find();

    4、修改记录,返回:受影响的行数

       $result = $model->save(一维关联数组);

       $result = $model->where()->save(一维关联数组);

    5、添加记录,返回:1)受影响的行数,2)新加记录的主键值

       $result = $model->add(一维关联数组);

       $result = $model->data(一维关联数组)->add();

    6、执行sql语句,返回:二维数组

       $result = M()->query("select语句");

    7、执行insert、update、delete语句,返回:受影响的行数

       $result = M()->execute("insert|update|delete语句");

    8、count查询,返回:整数

       $result = $model->count();

       $result = $model->where()->count();

    9、sum查询,返回:数字

       $result = $model->sum(字段名);

       $result = $model->where()->sum(字段名);

    10、avg查询,返回:数字

       $result = $model->avg(字段名);

       $result = $model->where()->avg(字段名);

    11、max查询,返回:数字

       $result = $model->max(字段名);

       $result = $model->where()->max(字段名);

    12、min查询,返回:数字

       $result = $model->min(字段名);

       $result = $model->where()->min(字段名);

    13、字段值自增

       $result = $model->where()->setInc("字段名");//加1

       $result = $model->where()->setInc("字段名",5);//加5

    14、字段值自减

       $result = $model->where()->setDec("字段名");//减1

       $result = $model->where()->setDec("字段名",5);//减5

        在多个页面需要同样的代码段时,可以在Controller文件夹下建立一个BaseController控制器来继承Controller父类,并且在其中添加方法来实现多个页面中相同的代码效果。在各个页面的控制器中直接继承BaseController这个类,如下代码:

     class Controller{}
         class BaseController extends Controller
      {
        public function _initialize()
        {}
      }
      
       class ShowController extends BaseController
      {}
    class Person
    {
      public function __construct()
      {
        if(method_exists($this,_initialize))
         {
           $this->_initialize()
         }
      }
    }
    class Son
    {
      //相当于子类的构造函数
      public function _initialize()
      {}
    }
    $s = new Son();

          十三、TP自带的类

               ThinkPHP自带的分页类

    library/ThinkPHP/Library/Think/Page.class.php

    分页类的使用

    use Think\Page;

    $page = new Page(总记录数,每页记录数=20);

    $result= $model->limit($page->firstRow,$page->listRows)->select();

    $pageList = $page->show();//分页栏

               ThinkPHP自带的验证码类

    library/ThinkPHP/Library/Think/Verify.class.php

    1、加载验证码

       1)控制器里的代码

         $verify = new Verify();

         $verify->length = 5;//字符个数

         $verify->fontSize 20;//字符大小

         $verify->entry();//显示验证码

       2)视图页面显示图片

         <img src="__APP__/控制器/方法">

    2、验证码的验证

       $verify = new Verify();

       $result = $verify->check(用户输入的验证码);

               ThinkPHP自带的文件上传类

    library/ThinkPHP/Library/Think/Upload.class.php

    一种:只上传一个文件

    $upload = new Upload();//实例化

    $upload->maxSize = 2000000;//最大大小(以字节为单)

    $upload->exts = array("jpg","gif");//允许上传的文件的扩展名

    $upload->autoSub = false;//用时创建一个子目录

    $upload->rootPath = "./";//保存路径的根目录

    $upload->savePath = "public/upfile/";//保存路径

    //上传文件

    $myFile = $_FILES["myFile"];

    $result = $upload->uploadOne($myFile);

    二种:多文件上传

    $upload = new Upload();//实例化

    $upload->maxSize = 2000000;//最大大小(以字节为单)

    $upload->exts = array("jpg","gif");//允许上传的文件的扩展名

    $upload->autoSub = false;//用时创建一个子目录

    $upload->rootPath = "./";//保存路径的根目录

    $upload->savePath = "public/upfile/";//保存路径

    //上传文件

     $result = $upload->upload();

    注意:php.ini中与上传相关的选项

    1、是否支持文件上传

       file_uploads = On|Off

    2、上传文件临时存储目录

       ;upload_tmp_dir = d:/hello

    3、允许上传的最大文件

       upload_max_filesize = 2M

    4、同一表单最多可以上传20个文件

       max_file_uploads = 20

    5、post表单最大提交的数据量

       post_max_size = 8M

    6、最多可占用多少内存

       memory_limit = 128M

            已经好长时间没有用过TP框架了,大致的功能点也就这么多......

  • 相关阅读:
    C++动态链接库实践
    解决:linux eclipse 对‘dlopen’未定义的引用, 对‘xxx’未定义的引用
    bsd linux macosx solaris windows
    字节码加载执行原理
    JNI原理
    TODO: Java虚拟机 初始化过程
    mysql replaceinto VS insertinto
    centos7 搭建测试环境
    java 传值
    vue中使用sass 做减法计算
  • 原文地址:https://www.cnblogs.com/xiaonannan/p/6830309.html
Copyright © 2011-2022 走看看