URL访问模式
1. 单应用URL
http://serverName/index.php/控制器/操作/参数/值…
注意:这里服务器启动是 php think run 的内置服务器,下节课会探讨外置服务器;
结构分析:
- serverName就是我们的:www.tp.com:8000;
- index.php 是入口文件,带上 / ;
- 控制器是app\controller\Index.php中的 Index 这个名称,也就是类名;
- 操作是类里面的方法名,比如:index(默认方法),hello(普通方法);
- 默认方法可以省略,会直接方法,其他普通方法需要键入方法名:
- http://www.tp.com:8000/index.php/Index (默认执行index操作)
- http://www.tp.com:8000/index.php/Index/index (完整路径)
- http://www.tp.com:8000/index.php/Index/test (普通方法,必须完整路径) - 系统默认自带的hello方法,是针对后续路由课程的,在路由文件设置过导致无效; - 我们在config/app.php中将路由关闭:”with_route” => false,
- http://www.tp.com:8000/index.php/Index/hello (执行默认参数值)
- http://www.tp.com:8000/index.php/Index/hello/name/World(修改参数值)
- 参数不够直观,尤其多参数的时候,也是支持传统方案的:
- http://www.tp.com:8000/index.php/Index/hello?name=World (问号键值对) ### 2. 多应用URL
http://serverName/index.php/应用/控制器/操作/参数/值…
- 如果开启多应用的话,URL比单应用多一个 应用 路径,其它一致;
05. 内.外置服务器
1. 启动内置
- 在手册命令行 -> 启动内置服务器,有 php think run 启动的服务器介绍;
- 启动后直接输入:127.0.0.1:8000 或 localhost:8000 或 www.tp.com:8000 访问;
- 停止内置服务器,在命令行使用 ctrl + c
2. 启动phpEnv
- 不管是本地的外置服务器集成环境phpEnv,还是以后要部署到远程服务器,都需要配置;
- 这里需要配置的重点就是伪静态,我们不启动内置服务器,只用外置访问试试;
- 注意:这里外置服务器,在第一课我们已经创建了 端口为 80 的 www.tp.com;
现在,直接访问试试?但出现了如下图的错误:
我们在 www.tp.com 目录下创建一个index.html或index.php索引文件,访问后:
3. 配置目录
在第一节课,我们创建的启动目录是 www.tp.com ,但目前知道这个目录下没有 index.php;
- 在手册的 基础 -> 目录结构 中 public 目录 解释为:WEB目录(对外访问目录);
- 并规范到:在实际项目部署中,确保只将 public 对外访问;
- 所以,我们将phpEnv站点配置目录设置为:www.tp.com/pubic 即可;
- 至于http.conf、伪静态和.htaccess等配置信息,默认情况下支持都用,后续需要配置再说;# 06. 控制器的定义
1. 定义方式
控制器:顾名思义MVC中的C,即逻辑控制定义;
默认在app\controller下编写对应的控制器类文件,如果想改默认目录:
// 访问控制器层名称 "controller_layer" => "controller",
类名和文件名大小写保持一致,并采用驼峰式(首字母大写);
// app\controller\User.php namespace app\controller; class User { public function index() { return "用户"; } public function login() { return "登录成功!"; } }
- User类创建两个方法 index(默认)和 login,访问 URL 如下:
- http://www.tp.com:8000/Index.php/user/
- http://www.tp.com:8000/Index.php/user/login
- 那么如果创建的是双字母组合,比如 class HelloWorld,访问 URL 如下:
http://www.tp.com:8000/Index.php/hello_world
namespace app\controller; class HelloWorld { public function index() { return "index"; } }
2. URL重写
URL重写可以省去 index.php 入口文件的键入,默认情况下内置服务器支持重写;
而外置服务器,比如phpEnv,省略了入口文件,则出现如下问题:
查看手册,根据它URL重写的修改方案(Apache),需要修改.htaccess最后一行:
#RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] Apache替换成下面一行 RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
备注:不同的环境、服务器等等都会有千奇百怪的问题,努力搜索解决即可;
- 如果实在解决不了,请就用 php think run 内置服务器就了,省事。
到时候部署到真实服务器环境,再折腾。。。### 3. 配置渲染
如果你想避免引入同类名时的冲突,可以 config\route.php 设置控制器后缀:
// 是否使用控制器后缀 // 此时,User.php 就必须改成 UserController.php,并类名也需要增加后缀 "controller_suffix" => true,
ThinkPHP 直接采用方法内 return 返回的方式直接就输出了;
如果需要使用 json 输出,直接采用 json 函数;
// json输出,不同浏览器美化样式不同,我这里用的FireFox public function json() { return json(["name" => "王二狗", "age" => 25, "gender" => "男"]); }
不推荐使用 die、exit 等 PHP 方法中断代码执行,推荐助手函数 halt();
halt("中断测试");