上一节,我们已经成功创建了一个thinkPHP项目,发现,项目目录中多了一个Application文件夹。

 

 

这个文件夹是自动生成的,里面存放的就是我们的程序代码。第一个目录,Common,这个是存放项目的一些公共函数。

 

 

Application文件夹中第二个目录Home,里面存放这模块的相关配置。刚才那个是公共的、全局的配置。

 

 

现在来看一个问题,我们访问http://www.php1234.com:8082/

 

会看到一个ThinkPHP的笑脸,那么为什么会访问到这个页面呢?换句话说,这个页面对应的文件在哪里? 

 

直接告诉你答案,在这里:

 

 

其实,我们访问http://www.php1234.com:8082/ 就相当于访问了 http://www.php1234.com:8082/index.php

 

index.php是项目的入口文件。


一步一步来:

 

访问 http://www.php1234.com:8082/index.php/


看到笑脸。

 

 

访问 http://www.php1234.com:8082/index.php/xxx

 

看到一张哭脸

 

 

由此可见,xxx是一个模块的名字,而在Application目录中,Home文件夹就是一个模块。那么我们试试访问

 

http://www.php1234.com:8082/index.php/home

 

 

又是笑脸。

 

 

 

 

也就是说,我们访问home模块,就会看到笑脸。那么,必然是因为访问了某一个php文件,那么这个php文件到底是什么呢?

看下home模块的目录:

 

 

 

 

前台通过GET方式请求项目资源,是先走到了MVC中的C,也就是Controller层。那么我们试一下访问http://www.php1234.com:8082/index.php/home/controller

 

 

不行,出现哭脸。和传统的MVC一样,应该是有一个Controller控制器的地址,Java中家欧洲哦@RequestMapping,那么php里面是啥呢?打开Controller文件夹看一下里面有些啥?

 image.png

我们发现这里面只有一个控制器,和一个空的index.html。index.html的意义是做一个安全文件,防止用户偷看我们这个文件夹的目录结构。

打开IndexController.class.php,一看这个名字的定义就知道,这是一个php类。

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
    public function index(){
        $this->show('<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} body{ background: #fff; font-family: "微软雅黑"; color: #333;font-size:24px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.8em; font-size: 36px } a,a:hover{color:blue;}</style><div style="padding: 24px 48px;"> <h1>:)</h1><p>欢迎使用 <b>ThinkPHP</b>!</p><br/>版本 V{$Think.version}</div><script type="text/javascript" src="http://ad.topthink.com/Public/static/client.js"></script><thinkad id="ad_55e75dfae343f5a1"></thinkad><script type="text/javascript" src="http://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script>','utf-8');
    }
}

namespace是命名空间,你可以理解为当前类所在的路径。use可以认为是当前类导入一些web环境的依赖资源。接着,这个类的名字叫做IndexController,Controller是固定的写法,关键就是前面的index,这个就相当于外部访问的接口地址。


我们现在来访问:

http://www.php1234.com:8082/index.php/home/index

果不其然,又看到笑脸了。

继续看这个类:

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
    public function index(){
        $this->show('<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} body{ background: #fff; font-family: "微软雅黑"; color: #333;font-size:24px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.8em; font-size: 36px } a,a:hover{color:blue;}</style><div style="padding: 24px 48px;"> <h1>:)</h1><p>欢迎使用 <b>ThinkPHP</b>!</p><br/>版本 V{$Think.version}</div><script type="text/javascript" src="http://ad.topthink.com/Public/static/client.js"></script><thinkad id="ad_55e75dfae343f5a1"></thinkad><script type="text/javascript" src="http://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script>','utf-8');
    }
}

里面只有一个方法index,那么我们尝试访问:

http://www.php1234.com:8082/index.php/home/index/index

 

还是笑脸。一目了然了,其实我们最终访问的就是这个方法!


那么,为什么我们直接输入http://www.php1234.com:8082/

也可以访问到该方法呢?肯定是在某一个配置文件中配置了。


在哪里?直接告诉你,在这儿:


image.png

    /* 默认设定 */
    'DEFAULT_M_LAYER'       =>  'Model', // 默认的模型层名称
    'DEFAULT_C_LAYER'       =>  'Controller', // 默认的控制器层名称
    'DEFAULT_V_LAYER'       =>  'View', // 默认的视图层名称
    'DEFAULT_LANG'          =>  'zh-cn', // 默认语言
    'DEFAULT_THEME'         =>  '',	// 默认模板主题名称
    'DEFAULT_MODULE'        =>  'Home',  // 默认模块
    'DEFAULT_CONTROLLER'    =>  'Index', // 默认控制器名称
    'DEFAULT_ACTION'        =>  'index', // 默认操作名称
    'DEFAULT_CHARSET'       =>  'utf-8', // 默认输出编码
    'DEFAULT_TIMEZONE'      =>  'PRC',	// 默认时区
    'DEFAULT_AJAX_RETURN'   =>  'JSON',  // 默认AJAX 数据返回格式,可选JSON XML ...
    'DEFAULT_JSONP_HANDLER' =>  'jsonpReturn', // 默认JSONP格式返回的处理方法
    'DEFAULT_FILTER'        =>  'htmlspecialchars', // 默认参数过滤方法 用于I函数...

你找到对应的配置了吗,没错,就是他们:


    'DEFAULT_MODULE'        =>  'Home',  // 默认模块

    'DEFAULT_CONTROLLER'    =>  'Index', // 默认控制器名称

    'DEFAULT_ACTION'        =>  'index', // 默认操作名称


默认的模块是home模块,控制器名称是index,默认方法是index!


那么是不是意味着,我们可以自己写一个方法,然后访问呢?


比如,我们在IndexController类中,编写一个hello方法。


    public function hello(){
        $this->show("<h1>*^_^*</h1>");
    }


和Java不同,我们不需要重新启动服务器,直接访问即可。


访问:http://www.php1234.com:8082/index.php/home/index/hello

image.png

我们自己画的笑脸也出来了吧!


练习:在index控制器中创建A、B、C三个方法,分别打印出字符串的“第一名”,“第二名”,“第三名”。


好了,现在再来看一个东西,当我们要访问hello方法,需要在地址栏输入这么一长串,显然过于繁琐。那么,有没有什么好的办法,可以让我们简化URL格式吗?有的,我们只需要在公共配置文件夹下加一些配置就行了。

image.png

<?php
return array(
	//'配置项'=>'配置值'
	"URL-MODEL" => 3 , #开始URL模型兼容
    "URL_ROUTER_ON" => "on", #开启路由
    
    #设置方法和具体的方法位置
    "URL_ROUTE_RULES" => array(
        "hello" => "Home/index/hello" #直接模块/控制器/方法名字
    )
);

接下来,只需要访问http://www.php1234.com:8082/index.php/hello

就可以了。


注意:8082是我本地设置的端口,你可以设置为别的端口,默认是80。80端口可以省略不写。