一、访问路径的方式
在application\index\controller\index.php中添加如下方法,进新测试
function test($a,$b){
echo "test a 的值是$a,b的值是$b";
}
1、 Get模式
http://localhost:端口号/根目录/thinkPHP包文件目录/public/index.php/模块名/控制器名/操作方法名?参数一=值一&参数二=值二......
2、 路径模式pathInfo
在操作方法中存在参数,在地址栏中写
http://localhost:端口号/根目录/thinkPHP包文件目录/public/index.php/模块名/控制器名/操作方法名/参数一/值一/参数二/值二......
3、 兼容模式
http://localhost:端口号/根目录/thinkPHP包文件目录/public/index.php?s=模块名/控制器名/操作方法名/参数一/值一/参数二/值二......
4、 重写模式—–通过URL重写隐藏入口文件
Apache的配置过程如下:
(1)httpd.conf配置文件中加载了mod_rewrite.so模块
(2)AllowOverride None 将None改为 All
(3)在应用入口文件同级目录添加.htaccess文件,内容如下:
<IfModule mod_rewrite.c>Options +FollowSymlinks -MultiviewsRewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
若为phpstudy环境,将上面代码中的最后一句修改为
RewriteRule ^(.*)$ index.php/$1 [L,E=PATH_INFO:$1]
(4)接下来就可以通过下面的方式访问了:
可以通过上面的前两种方式进行访问—-省略掉url中的入口文件index.php
二、 生成模块
1、手动代码添加模块
在thinkPHP5包目录下面的build.php文件中添加要加入的模块的设置代码,完全可以复制原文件中的demo示例代码,示例
// 定义test模块的自动生成 (按照实际定义的文件名生成)
'test' => ['__file__' => ['common.php'],'__dir__' => ['behavior', 'controller', 'model', 'view'],'controller' => ['Index', 'Test', 'UserType'],'model' => ['User', 'UserType'],'view' => ['index/index'],
],
然后在在入口文件public/index.php中添加执行build.php文件的代码:
//生成新模块
$build = include '../build.php';
// 运行自动生成\think\Build::run($build);
直接运行入口文件,就会自动生成模块以及下面的文件,可在application文件夹下面查看生成的新模块,如下图中的test文件夹及其子文件
2、命令行添加
若安装的是单一环境,需要在电脑的系统属性添加php文件的环境变量,否则cmd命令不能识别php命令,若定位到thinkPHP文件目录下,输入如下命令,执行成功即可
php think build --module test2
如下图:
在application中查看,如下多了一个模板test2
三、 通过控制器中的方法调用视图
视图文件一般都存放在application下面的模块文件下面的view文件夹下面,如果在controller文件夹下面有一个控制器文件index.php,那么index.php中方法里面所需要请求的所有模版文件就默认存放在view下面和控制器同名的文件夹index下面,新建自己的模版文件(thinkPHP5.0默认的是html文件)
1、 通过继承控制器父类的方法实现
相关代码如下
\think\Controller
Class xxxx extends Controller {
Function test(){
//如果无参数,那么默认就会找和当前方法同名的模版文件,也即是test.htmlreturn $this->fecth();//有参数情况如下:return $this->fecth(“模版文件名(不带后缀)”);}
}
2、 直接使用thinkPHP5.0提供的助手函数来加载页面
//如果无参数,那么默认就会找和当前方法同名的模版文件,也即是test.html
return view();
return view([“模版名”]);
助手函数调用格式:
view(’[模板文件]’[‘模板变量(数组)’][,模板替换(数组)])
3、 display和fetch方法的区别
http://miao.blog/article/thinkphp-fetch-display
Fetch用来显示模版文件
Display在模版中输出一些内容(字符串格式)
四、 定义修改路由
URL地址里面的index模块怎么才能省略呢,默认的URL地址显得有点长,通过路由可简化URL访问。
定义路由规则后,原来的URL地址将会失效,变成非法请求。
修改应用目录application下面的route.php,添加路由规则
1、 自定义无参路由
//访问test模块下面的test控制器中的test方法
'a'=>"test/test/test",
访问的时候url:
修改路由之前:
http://localhost:port/项目根目录/thinkPHP的目录/public/index.php/test/ test / test
修改路由之后:
http://localhost:port/项目根目录/thinkPHP的目录/public/index.php/a
注:
特殊情况:控制器名称是由多个单词组成,使用驼峰命名法,例如UserType,正常访问index模块下面UserType控制器下面的test1方法,url的访问格式:
域名/项目根目录/thinkPHP的/public/index.php/index/user_type/test1
定义路由规则:
"e"=>"test2/user_type/test1",
访问的时候:
域名/项目根目录/tp5的目录/public/index.php/e
但是原来的访问路径仍然有效!!!
注意事项:定义路由规则的时候,如果是给Index模块下定义,则路由中可以省略到模块名,例如:
"h"=>"test/test4",
这表示会自动找Index模块下面的test控制器下的test4方法,如果是非Index模块,则需要完整的写完!
2、 必填参数路由
//必填参数为$j
'b/:j'=>"test/test/test2",
修改路由之前:
http://localhost:port/项目根目录/thinkPHP的目录/public/index.php/test/test/test2/j/1
修改路由之后:
http://localhost:port/项目根目录/thinkPHP的目录/public/index.php/j/参数值
3、 可选参数路由
//可选参数为$k
'c/[:k]'=>"test/test/test3"
修改路由之前:
http://localhost:port/项目根目录/thinkPHP的目录/public/index.php/test/test/test3【/k/参数值】
修改路由之后:
http://localhost:port/项目根目录/thinkPHP的目录/public/index.php/k【/参数值】
4、 多个参数路由
控制器中的方法有多个参数,设置路由实例(假设index2方法有两个参数id和name):
"g/:id/:name"=>"test2/index/index2",
访问的模式:
域名/项目根目录/thinkPHP的目录/public/index.php/g/参数一的值/参数二的值
5、 动态更改路由
(1)使用Url::build()
Url::build('控制器名称/方法名', 【'参数名=值'】);
(2)使用助手函数:url():
url('控制器名称/方法名', 【'参数名=值'】);