对thinkphp5.0框架的实例学习

  不管是渗透测试仍是代码审计的过程当中会碰到用不一样的框架搭建起来的网站,熟悉这些框架的基本原理,会帮助咱们快速的理解漏洞原理,提升干活效率,因此本身本地搭了个php环境,来入门实例学习下thinkphp5.0框架。php

 1、基本概念理解

  (1)MVC结构html

  控制器(Controller)- 负责转发请求,对请求进行处理。程序员

  视图(View) - 界面设计人员进行图形界面设计。算法

  模型(Model) - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(能够实现具体的功能)。thinkphp

  上面三个概念是wiki的解释,个人简单理解就是Controller用来转发请求,View用来显示界面,Model用来联系数据库,Controller就是view和Model的中转站。数据库

  (2)命名空间浏览器

  (PHP 5 >= 5.3.0, PHP 7)
  从广义上来讲,命名空间是一种封装事物的方法。在不少地方均可以见到这种抽象概念。例如,在操做系统中目录用来将相关文件分组,对于目录中的文件来讲,它就扮演了命名空间的角色。具体举个例子,文件foo.txt 能够同时在目录/home/greg 和 /home/other 中存在,但在同一个目录中不能存在两个 foo.txt 文件。另外,在目录 /home/greg 外访问 foo.txt 文件时,咱们必须将目录名以及目录分隔符放在文件名以前获得/home/greg/foo.txt。这个原理应用到程序设计领域就是命名空间的概念。这是官网的解释,感受挺清楚的就直接粘过来了。安全

  think  ==> ./thinkphp/library/think       (系统核心类库)

  traits ==> ./thinkphp/library/traits     (系统Trait类库)

  app ==> ./application          (应用类库)app

  (3)目录概述框架

 2、简单实例

  数据库中的数据以下图:

  

  (1)控制器

  将index模块的Index控制器类(文件位置位于.\application\index\controller\Index.php)的hello方法修改成读取数据代码,代码以下:

<?php
namespace app\index\controller;

use think\Controller;    //文件位置在.\thinkphp\library\think\Controller.php
use think\Db;

class Index extends Controller
{
    public function hello()
    {
        $data = Db::name('data')->find();
        $this->assign('results', $data);
        return $this->fetch();
    }
}

  (2)视图

  在application\index\view\index下建立hello.html文件,代码以下:

<html>
<head>
<title></title>
</head>
<body>
    {$results.id}--{$results.data}
</body>
</html>

  (3)运行结果

  

 3、url和路由

  (1)URL访问

  thinkphp采用单一入口模式访问应用,对应用的全部请求都定向到应用的入口文件。标准的URL访问格式为:

  http://serverName/index.php/模块/控制器/操做

  模块名强制为小写。

  若是控制器是驼峰的,则要用下划线的方式访问,测试结果以下

  

  (2)路由

  

  运行结果以下图:

  

 4、请求和响应

  thinkphp新增了request请求对象和reponse响应对象的概念。

  (1)Request对象的一个主要职责是统一和更安全地获取请求的变量,用它提供的方法来代替$_GET 、$_POST 、 $_REQUEST 、 $_SESSION 、 $_COOKIE 、以及$_FILES 等全局变量,代码示例以下:

  

<?php
namespace app\index\controller;

use think\Request;

class index
{
    public function hello(Request $request, $name = 'World')
    {
        echo '路由信息: ';
        dump($request->routeInfo());
        echo 'url: ' . $request->url() . '<br/>';  //自动注入方式
        return 'Hello,' . $name . '!';
    }
}

 

  运行结果以下图:

  

  (2)Response对象用于输出数据给客户端或者浏览器。

  大多数状况,咱们不须要关注 Response 对象自己,只须要在控制器的操做方法中返回数据便可。代码示例以下:

<?php
namespace app\index\controller;

class index
{
    public function hello($name = 'World')
    {
        $data = ['name' => 'thinkphp', 'status' => '1'];
        return xml($data,201);
    }
}

  返回结果以下图:

  

 5、3.2和5.0的主要区别

  (1)5.0 的URL访问再也不支持普通 URL 模式,路由也不支持正则路由定义,而是所有改成规则路由配合变量规则;

  (2)5.0新增了请求对象Request和响应对象 Response;

  (3)5.0的数据库查询功能加强,原先须要经过模型才能使用的链式查询能够直接经过Db类调用,原来的M函数调用能够改用db函数;

  其余区别没列出,本身感受不是过重要。

  6、小结

  以上就是本身的学习过程,不对的地方还请指教。

相关文章
相关标签/搜索