最近在慕课网学习 thinkphp,由于教师使用的是 MAC下的 MAMP 环境,而我使用的是 win7 的 phpstudy,区别不大,记录在这里,方便查询。
不同系统集成环境安装:
mac 安装MAMP
windows 安装phpstudy
ThinkPHP 文档:https://www.kancloud.cn/manual/thinkphp5/118008
我最近在用 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 浏览器测试模块地址:

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

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.php

测试当前模块

ThinkPHP 修改默认配置 ,修改convention.php 可以达到修改配置php的目的,但是尽量不要对这个配置作任何的改变,否则以后对这个框架进行任何的升级会带来意想不到的错误。

  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,所有的关于应用配置都在这个目录下修改

  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 设置为 All

第三步,重启 phpstudy
这里我们在浏览器中重新输入去掉入口文件的请求地址:http://localhost/tp5/public/index/index/test  可以看到返回正确的数据

此时,隐藏请求入口文件成功!
如果以上文件配置不成功,必须要在请求地址中添加入口文件才可以请求成功!
ThinkPHP 绑定特殊的入口文件
比如开放给第三方人员时,只能让第三方访问特殊的入口文件
以 api.php 为例方法为:
第一步:在 入口目录中新建一个 api.php 入口文件,仿照默认入口文件中写它的目标常量配置。
  1. 定义应用目录入口
  2. 定义配置文件目录入口
  3. 加载框架引导文件

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

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

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

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

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

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

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

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

#如果想了解更加详细的 $request 的方法,就去 ThinkPHP/library/think/Request.php 中查看所有的方法

以下列举了常用的对参数获取的方法:

<?phpnamespace 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) {}#1、如果想要在浏览器中打印出来,需要进入thinkphp/convention.php,复制session配置到当前应用的config.php中#2、需要使用助手方法给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 的助手方法查询表<?phpnamespace 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                 命令行入口文件

在phpstudy中安装并使用ThinkPHP 5相关推荐

  1. MAC MAMP 中安装配置使用 ThinkPHP

    MAMP PRO 是Mac OS X 平台上经典的本地环境应用 MAMP 的专业版.专门为专业的Web开发人员和程序员轻松地安装和管理自己的开发环境. MAMP这几个首字母代表Mac OS X系统上的 ...

  2. php图文安装教程,phpstudy的安装及ThinkPHP框架的搭建图文讲解

    我们开始学习ThinkPHP框架,第一件事是要在自己的电脑上安装一个php的服务器,其实很简单.只需要下载一个phpstudy即可.phpstud集成了Apache+MySQL+phpMyadmin, ...

  3. 解决phpstudy中mysql无法启动,与本地安装的mysql冲突

    一.解决问题: 1.点击phpmysql中的mysql无法启动,显示正在启动后立即停止 二.产生原因: 本地新安装了mysql,与phpstudy中MySQL冲突. 三.解决办法 1.使用Win+R调 ...

  4. centos6安装mysql并远程连接_如何开启phpstudy中mysql的远程连接

    phpstudy是一款非常方便的php集成环境,许多人会使用它作为PHP网站的实验环境.phpstudy中也集成了Mysql数据库,那么集成环境中的mysql数据库如何才能远程连接呢? 通常情况下,实 ...

  5. 磁盘管理来安装linux,Linux_在CentOS系统中安装quota来管理磁盘配额,在网络管理的工作中,由于硬 - phpStudy...

    在CentOS系统中安装quota来管理磁盘配额 在网络管理的工作中,由于硬盘的资源是有限的,常常需要为多用户的服务器设定用户的linux磁盘配额.这个功能对公用的多用户服务器(免费的或者收费的)来说 ...

  6. php 安装 bzip2,Linux_Linux系统中安装使用Bzip2来压缩文件的方法讲解,安装 Bzip2命令如下:复制代码 - phpStudy...

    Linux系统中安装使用Bzip2来压缩文件的方法讲解 安装 Bzip2命令如下: 复制代码代码如下: make -f Makefile-libbz2_so && make & ...

  7. php什么设置前端代码,代码编辑器与PHPSTUDY的安装与配置过程(前端第一课)

    前端第一课:编辑器与PHPSTUDY的安装与配置过程 编辑器安装过程 1.Visual Studio Code 官网下载软件,解压下载文件,打开安装程序安装至你的计算机. 2.安装"Chin ...

  8. phpStudy下载安装+配置站点+You don't have permission to access / on this server错误解决

    下载:------------------------------------------------------------------------------------------------- ...

  9. c++删除文件delete_开启phpstudy中apache的put和delete请求方法并进行测试

    put请求方法: put方法可以向服务器写入文档! delete请求方法: delete方法可以向服务器请求删除url所指定的资源.但是,客户端无法保证删除操作一定会被执行,因为HTTP规范允许服务器 ...

  10. WordPress本地运行,PhpStudy中MySQL无法启动,数据库无法连接?

    之前的电脑安装过MySQL,若没有卸载,会出现MySQL无法启动的问题. 解决办法如下: 打开PhpStudy,更改设置中配置文件mysql.ini,修改为[mysqld]port=3307和[cli ...

最新文章

  1. ubuntu14.04上安装python3.6
  2. 【Swift】UITableViewCell 中 TTTAttributedLabel 超链接无法点击的问题
  3. 如何对SQL Server数据库中的孤立用户和系统及用户建立映射
  4. python异常值检测_python – 使用RPCA的异常值
  5. Mysql 多实例multi_mysqld_multi多实例运行
  6. 【机器学习】Bagging和Boosting的区别(面试准备)
  7. 【转载保存】ThreadPoolExecutor类使用详解
  8. oracle绑定值的结尾,Oracle Sql字符串多余空格处理方法小记
  9. AB=0与伴随矩阵相互作用型题
  10. 深度神经网络的正则化
  11. gif透明背景动画_PS教程:把静态照片做成GIF放大动画效果
  12. 微信背后的产品观,确实厉害!
  13. JavaScript下载后端返回的文件流
  14. CANoe中的Channel-based access和Network-based access
  15. HCNE110个知识点
  16. 小小一方士 C# Async\Await
  17. FPGA-10:设计个简单的cpu(真的简单!)
  18. 徐州市大数据管理中心市级政务云灾备服务
  19. linux xunsou_Linux下的迅搜(xunsearch)安装使用教程,并设置成开机启动服务
  20. 扫一扫功能在手机便签的哪里

热门文章

  1. springboot2.0整合logback日志(详细)
  2. 踏破铁鞋,Vmware 8完美安装Mac Lion狮子系统,CPU不支持虚拟化,键盘无响经验共享
  3. 服务器 显示w3wp.exe,w3wp.exe占用cpu过高的解决方法
  4. Tensorflow 年龄和性别识别(AgeGender)
  5. 2021年山东省安全员C证试题及解析及山东省安全员C证模拟考试
  6. 启动计算机按住del不放,电脑黑屏bios界面都进不去怎么办
  7. 鸿蒙系统安全模式,安全模式怎么连接wifi
  8. 奇迹mu选区后就一直显示连接服务器,奇迹mu双开
  9. 全民奇迹服务器如何修改,全民奇迹比较全的修改教程
  10. JetBrain Rider使用技巧(持续更新)