ThinkPHP5.0版本和ThinkPHP3.2版本的区别

 更新时间:2017年7月6日 23:33  点击:2147
本篇文章主要为大家介绍了ThinkPHP5.0版本和ThinkPHP3.2版本的区别,有兴趣的朋友就来看一看吧。

5.0版本和之前版本的差异较大,本篇对熟悉3.2版本的用户给出了一些5.0的主要区别。

URL和路由

5.0的URL访问不再支持普通URL模式,路由也不支持正则路由定义,而是全部改为规则路由配合变量规则(正则定义)的方式:

主要改进如下:

增加路由变量规则;
增加组合变量支持;
增加资源路由;
增加路由分组;
增加闭包定义支持;
增加MISS路由定义;
支持URL路由规则反解析;

请求对象和响应对象

5.0新增了请求对象Request和响应对象Response,Request统一处理请求和获取请求信息,Response对象负责输出客户端或者浏览器响应。

模块和控制器

控制器的命名空间有所调整,并且可以无需继承任何的控制器类。

应用命名空间统一为app(可定义)而不是模块名;
控制器的类名默认不带Controller后缀,可以配置开启use_controller_suffix参数启用控制器类后缀;
控制器操作方法采用return方式返回数据 而非直接输出;
废除原来的操作前后置方法;
增加beforeActionList属性定义前置操作;
支持任意层次的控制器定义和访问;
URL访问支持自动定位控制器;

数据库

5.0的数据库查询功能增强,原先需要通过模型才能使用的链式查询可以直接通过Db类调用,原来的M函数调用可以改用db函数,例如:

3.2版本

M('User')->where(['name'=>'thinkphp'])->find();

5.0版本

db('User')->where('name','thinkphp')->find();

主要改进如下:

支持链式查询操作;
数据查询支持返回对象、数组和PDOStatement对象;
数据集查询支持返回数组和Collection对象;
增加查询构造器,查询语法改变;
支持闭包查询;
支持分块查询;
支持视图查询;
增加SQL监听事件;

模型

5.0的模型变化是最大的,基本上模型是完全面向对象的概念,包括关联模型,模型类的后缀不再带Model,直接由命名空间区分,原来的D函数调用改为model函数,并且必须创建对应的模型类,例如:

3.2版本

D('User')->where(['name'=>'thinkphp'])->find();

5.0版本

model('User')->where('name','thinkphp')->find();

主要改进包括:

重构关联模型;
支持聚合模型;
废除视图模型(改为数据库的视图查询方法);
模型的扩展采用Trait机制;
增加获取器和修改器;
增加时间戳自动写入;
增加类型字段转换;
数组访问支持;
JSON序列化支持;

自动验证和自动完成

5.0的数据自动验证和自动完成和3.2版本区别较大,5.0的数据验证采用验证器定义并且通过think\Validate类进行统一的验证。自动完成则通过在模型里面定义修改器来完成。

异常

5.0对错误零容忍,默认情况下会对任何级别的错误抛出异常(但可以在应用公共文件中设置错误级别),并且重新设计了异常页面,展示了详尽的错误信息,便于调试。

调试和日志

5.0的页面Trace强化,支持浏览器控制台查看Trace信息。

5.0的日志驱动增加Socket方式,采用SocketLog支持远程调试。

常量

5.0版本废弃了原来的大部分常量定义,仅仅保留了框架的路径常量定义,其余的常量可以使用App类或者Request类的相关属性或者方法来完成,或者自己重新定义需要的常量。

废除的常量包括:

REQUEST_METHOD IS_GET IS_POST IS_PUT IS_DELETE IS_AJAX __EXT__  COMMON_MODULE MODULE_NAME CONTROLLER_NAME ACTION_NAME APP_NAMESPACE  APP_DEBUG MODULE_PATH

函数

5.0版本核心框架不依赖任何自定义函数,但仍然封装了一些常用功能到助手函数,你可以随意重新定义或者增加助手函数。

本篇文章为大家介绍了ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法,很有参考价值的,有需要的朋友就来看一看吧。

假设数据库中会计科目数据表的字段为:id,code,name,islast。分别为自增主键,科目编码,科目名称,是否为末级("1"表示末级科目)。

这里在Thinkphp的模型层中使用递归来构建ComboTree所需的数据,代码及注解如下:

 

 代码如下复制代码

namespace Home\Model;

use Think\Model;

 

class AccountModel extends Model{

 

  publicfunctiongetTreeList(){ 

  $data = $this->field('id,code,name,islast')->select();

  foreach($data as &$v){       //这里加入了元素pid,用来标识父级id的   

   $len = strlen($v['code']);

   if($len == 3){          //这里假设长度为3位的科目编码是一级,5位为二级科目,7位为三级,以此类推

    $v['pid'] = 0;

   }else{

    $v['pid'] = substr($v['code'],0,$len-2);

   } 

  }

  return$this->createTree($data);//生成ComboTree所需的数据结构

 }

  

 //递归的方式生成子树

 privatefunctioncreateSubTree($data,$pid){

  $tree = array();

  foreach($data as $k=>$v){

   if($v['pid'] == $pid){

    $newDate = array(

     'id'=> $v['id'],

     'text'=>$v['name'],

     'state'=>($v['islast'] != 1)?'closed':'open'

    );

    if($v['islast'] != 1){        //如果不是末级科目调用自身生成子数据

     $subData = $this->createSubTree($data,$v['code']);

     if(!empty($subData)){

      $newDate['children'] = $subData; 

     }

    }

    array_push($tree,$newDate);

   }  

  }

  return$tree;

 }

  

 //生成树,先从一级会计科目分类开始创建树形菜单数据

 privatefunctioncreateTree($data){ 

  $ret = array();

  foreach($data as $k => $v){

   if($v['pid'] == 0){

    $newDate = array( //创建为ComboTree能够识别的格式,这里我没有更好的办法了,只能这样处理

     'id'=> $v['id'],

     'text'=>$v['name'],

     'state'=>'closed'

    );

    $subData = $this->createSubTree($data,$v['code']);

    if(!empty($subData)){

     $newDate['children'] = $subData; 

    }

    $ret[] = $newDate;

   }   

  }

  return$ret;

 } 

}

 

类似上述的数据(如部门,地区等)需要构建树形菜单的简单修改代码后基本都能实现类似功能。

PHP在大家的生活中应用还是很多的,今天文章就给大家介绍下PHP获取文本框、密码域、按钮的值实例代码,有想法的赶紧来复制了。

获取表单元素提交的值是表单应用中最基本的操作方法。本节中定义POST()方法提交数据,对获取表单元素提交的值进行详细的讲解。

获取文本框、密码域、按钮的值

获取表单数据,实际上就是获取不同的表单元素的数据。

标签中的 name 是所有表单元素都具备的属性,即这个表单元素的名称,在使用时需要使用 name 属性来获取响应的 value 属性值。 所以,添加的所有控件必须定义对应的 name 属性值。另外,控件在命名上尽可能不要重复,以免获取的数据出错。

在程序开发过程中,获取文本框、密码域、隐藏域、按钮以及文本域的值的方法是相同的,都是使用 name 属性来获相应的 value 属性值。 本节仅以获取文本框中的数据信息为例,讲解获取表单数据的方法。希望朋友们能够举一反三,自己进行尝试完成其他控件值的获取。

下面使用登录实例来学习如何获取文本框的信息。在下面的实例中,如果用户点击 “登录” 按钮,则获取用户名和密码。

具体的实现步骤如下所示:

(1)利用任意的一种开发工具,创建一个PHP动态页,并将其命名为 index.php。

(2)添加一个表单,一个文本框和一个提交按钮,代码如下所示:

  

  form

  

   


用户名:

密 码:

     

   

  

(3)在

表单元素外的任意位置添加 PHP 标记符,使用 if 条件语句判断用户是否提交了表单,如果判断条件成立,则使用 echo 语句输出使用 $_POST[] 方法获取的用户名和密码,代码如下的现实:

<?php

if($_POST["submit"] =="登录"){      // 判断提交的按钮名称是否为“登录”

 // 使用 echo 语句输出使用 $_POST[] 方法获取的用户名和密码

 echo"用户名为:".$_POST['user'] ."
密码为:".$_POST['pwd'];

}

?>

注意: 在应用文本框传值时,一定要正确的设置文本框的 name 属性,其中不应该有空格;在获取文本框的值时,使用的文本框名称一定要与表单文本框中设置的 name 相同,否则将不能获取文本框的值。

(4)在浏览器中输入运行地址,按回车键,得到如下图所示的运行结果:

 代码如下复制代码

PHP的使用也是很广泛的,今天文章就给大家介绍个实例:PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算,下面具体来看看。

本文实例讲述了PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算方法。分享给大家供大家参考,具体如下:

其实就是strtotime这个内置函数

//PHP 日期 加减 周

date("Y-m-d",strtotime("2013-11-12 +1 week"))

//PHP 日期 加减 天数

date("Y-m-d",strtotime("2013-11-12 12:12:12 +1 day"))

//PHP 日期加减小时

date("Y-m-d h:i:s",strtotime("2013-11-12 12:12:12 +1 hour"))

//PHP 日期 加减 月数

date("Y-m-d",strtotime("2013-11-12 12:12:12 +1 month"))

//PHP 日期 加减 分

date("Y-m-d h:i:s",strtotime("2013-11-12 12:12:12 +1 minute"))

//PHP 日期 加减 秒

date("Y-m-d h:i:s",strtotime("2013-11-12 12:12:12 +1 second"))

[!--infotagslink--]

相关文章

  • thinkPHP5 tablib标签库自定义方法详解

    这篇文章主要介绍了thinkPHP5 tablib标签库自定义方法,结合具体实例形式分析了thinkPHP5标签库的定义、用法及相关注意事项,需要的朋友可以参考下...2017-05-21
  • ThinkPHP5.0版本和ThinkPHP3.2版本的区别

    本篇文章主要为大家介绍了ThinkPHP5.0版本和ThinkPHP3.2版本的区别,有兴趣的朋友就来看一看吧。 5.0版本和之前版本的差异较大,本篇对熟悉3.2版本的用户给出了一些5...2017-07-06
  • Thinkphp5.0自动生成模块及目录的方法详解

    这篇文章主要介绍了Thinkphp5.0自动生成模块及目录的方法,简单分析了Thinkphp5.0的结构、目录、创建与运行方法,需要的朋友可以参考下...2017-04-26
  • thinkphp3.2中实现phpexcel导出带生成图片示例

    小编给大家推荐的这篇文章介绍了thinkphp3.2中实现phpexcel导出带生成图片示例,非常实用,有兴趣的同学快来看看吧。 首先下载PHPEXCEL 下载地址:http://phpexcel.co...2017-07-06
  • 浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别

    小编小编就为大家带来一篇浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-06-20
  • thinkPHP5 ACL用户权限模块用法详解

    这篇文章主要介绍了thinkPHP5 ACL用户权限模块用法,结合实例形式详细分析了权限控制所涉及的数据库、配置、信息获取、验证规则等相关操作技巧,需要的朋友可以参考下...2017-05-21