<?php //定义app命名空间 namespace app\index\controller; //定义类名,类名和文件名保持一致 class Index { //编写一个方法 public function index(){ return "This is PHP Class Name." } } ?>
class User extends commonUser { public function demo(){ //直接return 继承过来的方法 showName() return $this -> showName("kevin.chen"); } }
ThinkPHP 浏览器测试模块地址:php
http://serverName/index.php(或者其它应用入口文件)/模块/控制器/方法/[参数名/参数值...]
css
serverName
后面应该为 tp5 的入口文件而非 phpstudy 的入口文件路径,不然会报一个莫名其妙的 403 错误!
当前服务器地址为 http://localhost
当前入口文件路径为 tp5/public/index.php
当前模块/控制器/方法为 index/index/test
Index.phpmysql
测试当前模块web
ThinkPHP 修改默认配置 ,修改convention.php 能够达到修改配置php的目的,可是尽可能不要对这个配置做任何的改变,不然之后对这个框架进行任何的升级会带来意想不到的错误。sql
ThinkPHP 应用配置,修改当前应用的配置能够替换当前 PHP 默认的配置信息。应用配置目录 conf,全部的关于应用配置都在这个目录下修改thinkphp
此时 index.php 就是入口文件,全部要访问控制器模块的方法必需要通过这个入口文件才能进入控制器模块,这样是不安全的。隐藏入口文件就是这个缘由,须要修改 Apache中的 httpd.conf 文件,以 phpstudy 为例:数据库
第二步,找到网站根目录,DocumentRoot "E:\soft\phpstudy2018\PHPTutorial\WWW",将 AllowOverride 设置为 Allapache
第二步,打开 thinkphp 框架的配置文件 convention.php 找到 auto_bind_module 这个入口自动绑定模块的配置信息json
将它复制到 咱们应用的配置文件中 app\conf\config.php 中,将默认值改成 truewindows
第三步,在咱们的应用中新建一个提供给第三方的模块,app\aip\controller\Api.php
思考:若是咱们有多个入口文件,路径相同,指向应用相同,入口文件对应应用中的模块,只要在写 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来调用数据库,操做数据库。
数据库配置路径为:
<?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
project 应用部署目录
├─application 应用目录(可设置),全部的应用都写在这里,常用
│ │ ├─config.php 模块配置文件
│ │ ├─common.php 模块函数文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ ├─view 视图目录
├─admin(后台的逻辑,对应index模块)
│ ├─common.php php的公共函数,能够写在这里,任何地方均可以调用,应用公共(函数)文件
│ ├─tags.php 是对 ThinkPHP 框架进行扩展而不须要修改源码
├─extend 加载第三方库时使用,直接将类库下载到这个目录
│ ├─static 静态资源存放目录(css,js,image)
├─robots.txt 搜索引擎爬虫定义规则
│ └─.htaccess 用于 apache 的重写
├─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 命令行入口文件