在phpstudy中安装并使用ThinkPHP 5

 
 
最近在慕课网学习 thinkphp,因为教师使用的是 MAC下的 MAMP 环境,而我使用的是 win7 的 phpstudy,区别不大,记录在这里,方便查询。
 
不一样系统集成环境安装:
mac 安装MAMP
windows 安装phpstudy
 
 
我最近在用 mac 机,可是尚未使用过 MAMP ,所以先尝试使用 phpstudy 来学习,后续追加 MAMP 的方法。
 
phpstudy安装ThinkPHP步骤:
  1. 进入ThinkPHP官网,下载完整版本:http://www.thinkphp.cn/
  2. 解压出下载的 ThinkPHP 复制全部文件
  3. 在 phpstudy 安装路径下的找到 www 文件夹,新建 tp5 文件夹,将解压的全部 ThinkPHP 文件粘贴到tp5中
  4. 重启 phpstudy
  5. 在浏览器中输入 http://localhost/tp5/public/
  6. 显示为 “ ThinkPHP V5
    十年磨一剑 - 为API开发设计的高性能框架”即为安装成功
ThinkPHP 规范:
  1. 全部的目录要使用小写+下划线
  2. 函数文件名必须以 .php 结尾
  3. 命名空间 namespace 必须和目录路径一致:  <? php namespace app\index\controller 
  4. 类库名必须和文件名保持一致,首字母必须大写,采用驼峰式书写:文件名为 Index.php 那么类库名必须为 class Index {...}
  5. 函数名必须为首字母小写,采用驼峰书写格式: pubilc function getUserName(){...}
  6. 变量名首字母小写,采用驼峰书写格式:public $userName = '';
  7. 构造函数名以双下载线+小写字母,这种文件尽可能不用:public function __controll(){...}
  8. 常量必须所有大写而且如下划线链接:define('APP_STATE','dev');
  9. 全部配置名必须所有小写而且如下载线链接:'app_namespace' => 'app',
  10. 数据库或表名必须以小写字母加下载线链接,不能出现驼峰或首字母大写:user_name
  11. 顶及命名空间(目录)统一叫 app,造成良好的开发方式:namespace app\index\controller  从命名空间来看这个路径就是目录的路径
 
ThinkPHP 模块的创建:
  1. 将 application 文件夹名称更改成 app。能够此文件夹下新建各类模块,好比首页(index)、登陆管理(admin)、用户管理(user)等
  2. 创建首页(index)为例,路径为:app\index\controller\Index.php(意为index模块的控制器controller下的Index.php 文件)
  3. 创建方法  1)定义模块的命名空间 namespace app\index\controller;  2)定义类名 class Index {...}  3) 写方法 public function index(){...}
  4. 修改 public/index.php 路径,指向目录app,也就是入口路径 
    define ( 'APP_PATH' , __DIR__ . '/app/' );
<?php //定义app命名空间
 namespace app\index\controller; //定义类名,类名和文件名保持一致
      class Index { //编写一个方法
            public function index(){ return "This is PHP Class Name." } } ?>

 

ThinkPHP 经过别名导入其它模块中的方法,别名是经过操做符 use 来实现的:
  1. 导入:use app\common\controller\User as commonUser;导入app\模块名称\controller\文件名称 as 别名(别名以模块名称+方法名称,驼峰组合)】
  2. 继承: class User extends commonUser { ... } 将导入的方法继承给当前类,在当前类中的方法中使用
  3. 使用: 直接在当前方法中使用继承过来的方法
class User extends commonUser { public function demo(){ //直接return 继承过来的方法 showName()
          return $this -> showName("kevin.chen"); } }

 

ThinkPHP 浏览器测试模块地址:php

http://serverName/index.php(或者其它应用入口文件)/模块/控制器/方法/[参数名/参数值...]css

http://localhost/tp5/public/index.php/index/index/test
 
这里须要注意一点,phpstudy中的入口文件默认为 www目录下的index.php,tp5的入口文件为 public目录下的index.php。
由于要测试 tp5 的模块,所以,须要把 tp5 的入口文件做为应用的入口文件,serverName 后面应该为 tp5 的入口文件而非 phpstudy 的入口文件路径,不然会报一个莫名其妙的 403 错误!
 
如下图为例,当前为 phpstudy的入口:
  1. 当前服务器地址为 http://localhost
  2. 当前入口文件路径为  tp5/public/index.php
  3. 当前模块/控制器/方法为  index/index/test
 
个人目录树为下图,用下图来看上面的路径会一目了然

 

Index.phpmysql

测试当前模块web

ThinkPHP 修改默认配置 ,修改convention.php 能够达到修改配置php的目的,可是尽可能不要对这个配置做任何的改变,不然之后对这个框架进行任何的升级会带来意想不到的错误。sql

  1. 在 public/index.php 中新建一个常量  
    //定义配置文件目录
    define('CONF_PATH', __DIR__ . '/../conf/')
  2. 与app同级新建一个 conf 目录
  3. 在index 模块的文件 Index.php 中新建一个方法,起名为 testConfig 
    public function testConfig(){
        dump(config());
    }
  4. 浏览器中测试 http://localhost/tp5/public/index.php/index/index/testConfig  返回当前状态的全部配置,当前状态的配置来源于 thinkphp>convention.php
  5. 修改 convention.php ,添加
      //默认做者
      'app_author'    => 'kevin.chen' , 刷新 url 便可看到 config 配置中已经添加一个  app_author 的数组

 

ThinkPHP 应用配置,修改当前应用的配置能够替换当前 PHP 默认的配置信息。应用配置目录 conf,全部的关于应用配置都在这个目录下修改thinkphp

 
  1. 在 app 下新建一个后台的模块 admin\controller\Index.php
  2. public function showAdminConfig(){
        dump(config());
    };
  3. 在浏览器中输入http://localhost/tp5/public/index.php/admin/index/showAdminConfig 一样能够打印出 php的配置,可是咱们是不要使用 php 框架的配置文件信息的,咱们是要打印本身应用的配置信息,所以须要创建本身应用的 config.php 配置文件
  4. 同 app 同级创建一个 conf 的目录,在这个目录下创建一个 config.php 配置文件,这个配置文件中直接 return 一个数组,这个数组就是 当前应用的配置信息
          return [
                "app_name"            => "my_anviz",
                "app_author"          => "kevin.chen",
                "app_email"           => "11452155@qq.com",
          ]
  5. 再次刷新 http://localhost/tp5/public/index.php/admin/index/showAdminConfig 就能够看到 打印的配置信息的尾部,增长了刚刚增长的数组。
  6. 说明应用配置信息是能够改变 PHP框架的配置信息的。若是想改变 php 的配置信息不能够修改convention.php文件,只需修改当前应用的配置信息便可改变 php 的配置信息。
  7. 好比想要修改 PHP中的调试模式为 true,只需在当前应用的配置文件中增长一条 
    app_debug => true 的配置信息便可改变原 php 的配置信息。
         return [
                "app_name"            => "my_anviz",
                "app_author"          => "kevin.chen",
                "app_email"           => "11452155@qq.com",
                "app_debug"           => true
          ]
 上面url刷新以后显示为

 

 

ThinkPHP 请求
全部的请求都会进入 public\index.php ,再经过携带不一样的参数而进入不一样的控制器中,不一样的控制器实现不一样的操做,最终实现不一样的功能,如:增、删、改
 
ThinkPHP 隐藏请求入口文件
好比:http://localhost/tp5/public/ index.php/index/index/test,能够正常返回数据

此时 index.php 就是入口文件,全部要访问控制器模块的方法必需要通过这个入口文件才能进入控制器模块,这样是不安全的。隐藏入口文件就是这个缘由须要修改 Apache中的 httpd.conf 文件,以 phpstudy 为例:数据库

 

phpstudy 面板 -> 其它选项菜单 -> 打开配置文件 -> httpd.conf
  ·
第一步:搜索 rewrite ,将 LoadModule rewrite_module modules/mod_rewrite.so 这句打开

 

 第二步,找到网站根目录,DocumentRoot  "E:\soft\phpstudy2018\PHPTutorial\WWW",将 AllowOverride 设置为 Allapache

 

 

第三步,重启 phpstudy
 
这里咱们在浏览器中从新输入去掉入口文件的请求地址:http://localhost/tp5/public/index/index/test  能够看到返回正确的数据
此时,隐藏请求入口文件成功!
 
若是以上文件配置不成功,必需要在请求地址中添加入口文件才能够请求成功!
 
ThinkPHP 绑定特殊的入口文件
好比开放给第三方人员时,只能让第三方访问特殊的入口文件
 
以 api.php 为例 方法为:
第一步:在 入口目录中新建一个 api.php 入口文件,仿照默认入口文件中写它的目标常量配置。
  1. 定义应用目录入口
  2. 定义配置文件目录入口
  3. 加载框架引导文件

第二步,打开 thinkphp 框架的配置文件 convention.php 找到  auto_bind_module 这个入口自动绑定模块的配置信息json

将它复制到 咱们应用的配置文件中 app\conf\config.php 中,将默认值改成 truewindows

第三步,在咱们的应用中新建一个提供给第三方的模块,app\aip\controller\Api.php

此时,咱们访问为第三方配置的接口为:http://localhost/tp5/public/api/api/testApi
 
正常显示为:

 

 思考:若是咱们有多个入口文件,路径相同,指向应用相同,入口文件对应应用中的模块,只要在写 url 请求时 ,更改应用的模块名就能够访问不一样的模块。是这样吗?

 

 ThinkPHP 是个单入口框架,全部的入口都会进入 index.php 文件,经过 index.php来接收全部的http请求,请求中的全部参数均可以经过 Request 这个对象进行接收和处理。

下面就写 thinkPHP 的 Request 这个对象是怎么对请求进行处理的,首先要知道如何获取 request 这个对象的?

<?php namespace app\index\controller; use think\request;  //Request 对象要从think\request 中获取
           class Index { //注入对象的方式
                 public function index(Request $request){ dump($request); } } ?>

#若是想了解更加详细的 $request 的方法,就去 ThinkPHP/library/think/Request.php 中查看全部的方法

如下列举了经常使用的对参数获取的方法:

 

<?php namespace app\index\controller; use think\request; class Index { public function getRequest(Request $request){ #获取浏览器的值 #若是当前请求地址为:http://localhost/tp5/public/index/index/getRequest
 dump($request -> domain());        //获取浏览器的域名,返回为 "http://localhost"
dump($request -> pathinfo());      //获取参数前的全部的路径,返回为 "index/index/getRequest"
dump($request -> path());          //获取不含文件后缀的路径,若是没有后缀,pathinfo()同path()返回的对象是同样的,返回为 "index/index/getRequest"

 #判断请求类型 #若是当前请求地址为:http://localhost/tp5/public/index/index/getRequest?id=5
 dump($request -> method());        //返回为 "GET" ,在web开发中通常只有GET与POST 两种请求类型
dump($request -> isGet());         //判断当前请求是否为GET,返回为一个布尔值为true = bool(true)
dump($request -> isPost());        //判断是否为post请求,返回应该 为false
dump($request -> isAjax());        //判断当前请求是否为 Ajax 请求,返回应该 为false

 #获取请求参数 #若是当前请求地址为:http://localhost/tp5/public/index/index/getRequest?id=5&page=10
 dump($request -> get());           //获取当前的get ?后的参数,返回key为id,value为5: ["id"] => string(1) "5"
dump($request -> param());         //获取当前的get ?前的参数,返回key为id,value为5: ["id"] => string(1) "5"
dump($request -> post());          //获取当前 post 的值,当前url是个get请求,所以只会返回一个空的数组 array(0) {}


 #测试session,获取当前浏览器的 session 的值,若是没有只会返回一个空的数组 array(0) {} #一、若是想要在浏览器中打印出来,须要进入thinkphp/convention.php,复制session配置到当前应用的config.php中 #二、须要使用助手方法给session,set一个值
 session('name','kevin.chen');             //设置 session 的值
dump($request -> session());              //返回一个数组 array(1) {["name"] => string(10) "kevin.chen"}

 #测试 cookie,首先须要set一个值
cookie('email','don-pan.cwf@163.com');    //设置cookie的值
dump($request -> cookie());               //获取 cookie的值,会返回一个 PHPSESSID 的值


 #获取某个参数的值 #若是当前请求地址为:http://localhost/tp5/public/index/index/getRequest?id=5&page=10 #在查询时一般使用经过某个 id 来查询等
 dump($request -> get('id'));               //返回 "5"
dump($request -> cookie('email'));         //返回 "don-pan.cwf@163.com"
dump($request -> post("id"));              //不存在的id,返回为null
dump($request -> param("page"));           //返回为 "10"



 #获取当前的模块 控制器 方法 #若是当前请求地址为:http://localhost/tp5/public/index/index/getRequest?id=5&page=10 #在编写权限控制时,经过这三个选项共同来验证是否有权限访问
 dump($request -> module());                //返回当前模块名为 index
dump($request -> controller());            //返回当前控制器名为 Index (首字母大写)
dump($request -> action());                //返回当前方法名为 getRequest



 #获取当前 url #若是当前请求地址为:http://localhost/tp5/public/index/index/getRequest?id=5&page=10
 dump($request -> url());                   //返回 "/tp5/public/index/index/getRequest?id=5&page=10"
dump($request -> baseUrl());               //返回不包含参数的url"/tp5/public/index/index/getRequest"
 } } ?>

 

 ThinkPHP 链接数据库,并查询表

第一步,要新建数据库,phpMyAdmin,使用它来建库建表

第二步,数据库必须与PHP进行配置,才可使用PHP来调用数据库,操做数据库

数据库配置路径为:

  1. 找到 thinkPHP -> convention.php ,找到 数据库设置【database】这个数组
  2. 在当前应用的 conf 目录下,新建一下 database.php 文件
  3. 将 database 里面的key,value复制到新建的 database.php 当中,分别对 数据库中的 key 设置它的 value(配置红色注释部分
  4. 将这个数组 return 返回
<?php //数据库配置
    use\think\Env; return [ // 数据库类型
        'type'            => 'mysql',
        // 数据库链接DSN配置
        'dsn'             => '',
        // 服务器地址
        'hostname'        => '127.0.0.1',
        // 数据库名
        'database'        => 'test',
        // 数据库用户名
        'username'        => 'root',
        // 数据库密码
        'password'        => 'root',
        // 数据库链接端口
        'hostport'        => '3306',
        // 数据库链接参数
        'params'          => [],
        // 数据库编码默认采用utf8
        'charset'         => 'utf8',
        // 数据库表前缀
        'prefix'          => '' ] ?>

第三步,配置好数据库以后,就能够对数据库进行操做了

在当前模块下新建一个方法,取名为 testDataBase

# 首先要加载 thinkphp 的db 方法 # 再用 db 的助手方法查询表

<?php namespace app\index\controller; use think\Db; class Index {   #测试数据库是否链接成功
          public function testDataBase(){   $res = db('user') -> find();   dump($res);    } } ?>

咱们在浏览器中输入以下 url ,就能够看到查询的表数据了:

http://localhost/tp5/public/index/index/testDataBase

array(3) { ["user_id"] => int(1) ["user_name"] => string(10) "kevin.chen" ["user_age"] => string(2) "34" }

返回3个字段,每一个字段的 key,数据类型,value


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
 
 
 
ThinkPHP 目录说明:
 
project  应用部署目录
├─application             应用目录(可设置),全部的应用都写在这里,常用
│  ├─common                                        公共模块目录(可更改)
│  ├─ index(MVC)主要页面部分的逻辑              模块目录(可更改)
│  │  ├─config.php       模块配置文件
│  │  ├─common.php       模块函数文件
│  │  ├─controller       控制器目录
│  │  ├─model           模型目录
│  │  ├─view            视图目录
│  │  └─ ...            更多类库目录
│    ├─admin(后台的逻辑,对应index模块)      
│  ├─command.php                         php配置文件
│  ├─common.php         php的公共函数,能够写在这里,任何地方均可以调用,应用公共(函数)文件
│  ├─config.php                               php应用的配置文件,整个应用都读取这个文件,应用(公共)配置文件
│  ├─database.php                          数据库配置文件,链接数据库的方法,须要修改这个文件
│  ├─tags.php          是对 ThinkPHP 框架进行扩展而不须要修改源码
│  └─route.php                                 路由配置文件,对url进行假装美化,能够修改这个文件
├─extend               加载第三方库时使用,直接将类库下载到这个目录
├─ public                                          网站根目录,全部网站的文件都要放在这个目录下,WEB 部署目录(对外访问目录)
│  ├─static           静态资源存放目录(css,js,image)
│  ├─index.php                                 网站的入口文件,应用入口文件
│  ├─router.php                                更改url地址文件
  ├─robots.txt         搜索引擎爬虫定义规则
│  └─.htaccess         用于 apache 的重写
├─ runtime                                        网站运行中的缓冲文件,包含日志,缓存,编译文件等
├─vendor               第三方类库目录(Composer)
├─thinkphp             框架系统目录
│  ├─lang             语言包目录
│  ├─library           框架核心类库目录 │  │  ├─think         框架的核心文件,Think 类库包目录 │  │  └─traits         系统 Traits 目录 │  ├─tpl              框架默认的一些模板,系统模板目录 │  ├─.htaccess          用于 apache 的重写 │  ├─.travis.yml        CI 定义文件 │  ├─base.php           定义一些常量,基础定义文件 │  ├─composer.json       composer 定义文件,配置文件 │  ├─console.php        控制台入口文件 │  ├─convention.php      框架默认的配置文件,惯例配置文件 │  ├─helper.php         助手函数文件(可选) │  ├─LICENSE.txt        受权说明文件 │  ├─phpunit.xml        单元测试配置文件 │  ├─README.md          README 文件 │  └─start.php          框架引导启动文件 ├─build.php             自动生成定义文件(参考) ├─composer.json          composer 定义文件 ├─LICENSE.txt           受权说明文件 ├─README.md             README 文件 ├─think                 命令行入口文件
相关文章
相关标签/搜索