当前位置: 代码迷 >> 综合 >> thinkPHP5.0在PHP中的基本操作-------(一)
  详细解决方案

thinkPHP5.0在PHP中的基本操作-------(一)

热度:108   发布时间:2023-10-25 10:48:02.0

一、访问路径的方式

在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('控制器名称/方法名', 【'参数名=值'】);