💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
殊途同归 http://127.0.0.1/thinkphp5/public http://127.0.0.1/thinkphp5/public/index.php http://127.0.0.1/thinkphp5/public/index.php/index http://127.0.0.1/thinkphp5/public/index.php/index/Index http://127.0.0.1/thinkphp5/public/index.php/index/Index/index 上述五种不同的URL之所以访问结果全部相同,是由于他们本身就是相同的。 原因是:默认值! apache的默认值 我们在前面讨论过,当我们不指定文件名的时候,会先找index.html,然后再找index.php,这个是在apache中设置的,也就是apache在起这个作用。 thinkphp的默认值 在thinkphp中,是通过“入口文件/模块名(module)/控制器名(controller)/触发器名(action)”来确定用户的URL对应执行哪个方法中的语句的。如下图所示: 比如我们进行如下访问:![](https://box.kancloud.cn/5eefb2108704ee22a9b017c46e27ef6d_629x456.png) 按照ThinkPHP的规定,其实是直接执行了d:/xampp/htdocs/thinkphp5/public/index.php这个文件(我们把这个文件叫做入口文件),ThinkPHP的开发团队在这个文件中写了一些特定的代码,这些代码最终自动调用了d:/xampp/htdocs/thinkphp5/application/index/controller/index.php中的index()方法。 至于index.php这件文件是怎么做到调用那个index()方法的,现在我能给出的答案是:自动。其实我们并不需要知道它是怎么调用呢,学会如果使用ThinkPHP才是我们现在的目的。 我们把application下面的子文件夹,称为模块(Module),把模块下的controller文件夹中的子文件称之为控制器(Controller),把控制器文件中的方法称为触发器(Action)。 对于ThinkPHP自动调用的规则,我们用一个比较乱,但却很能说明问题的图来说明一下。![](https://box.kancloud.cn/46f42da640597279949bcbaff80caef4_1307x671.png) 模块:module,控制器:controller,触发器:action。以后我们会越来越多的和它们打交道,每一个URL都会对应着一个触发器,我们有必要多花些精力把MCA弄明白。 当我们未指定模块名时,调用的是默认模块index。 当我们未指定控制器名时,调用的是默认控制器Index(注意,这个是Index,而不是index,原因是控制器实际上是一个类,我们规定类的名字首写字母要大写)。 当我们在URL中未指定触发器名时,调用的是默认触发器index。 程序员思维就是这样,能用统一的 "index"变量(文件名等…)的时候,他们就懒得用其它变量……; 但其实 MCA这里面的概念好多啊? 一会儿模块名、一会儿控制器名、一会儿触发器名(函数名)……整这么多?!还都起名叫“index”……简直让初学者晕死去。 好吧,让我来拯救初学者……咱们把所有的名字都区分开! 比如: Module模块名咱就叫: module1name1、module2name2、module3name3等……; Controller控制器名咱就叫: controller2name2、controller4name4……等; Action(触发器)名咱就叫: action3functionName3, action6fuctionName6等等…… 起名字吗……咱就讲究“谁也不影响谁”(俗称:天上一手地下一脚、十三不靠) 再看一下,重命名以后的 Thinkphp(部署:目录、文件、类、函数)架构吧: ![](https://box.kancloud.cn/5a4527fb5647a3a44cac854814d835ee_913x693.png) MCA 是的,没有什么深奥的道理。 M = Module 它对应一个文件夹(可以称为:“模块”) C = Controller 它对应一个文件(可以称为:控制器、或称为“类名字”) A = Action 它对应一个方法(它还有几个名字:触发器、函数、function、method) 每个URL都会对应唯一的一组MCA,这组唯一的MCA会执行特定的function。当用户访问一个URL时,就会执行一个对应的function,我们把一些代码写在这个function中,那么相应的功能就实现了。就像我们前面输出hello world一样,是把一些输出hello world的代码放到了index模块下的Index控制器下的 function index()中。 【注意】: 我们把这个function又叫做触发器,而且我们仅将Controller中的function叫做触发器,原因大概是由于这个function如果想被执行的话,需要用户输入特定的URL。我们说当用户输入特定的URL后,这个方法被触发了,所以叫做触发器。 是的,就是这么简单。 apache与thinkphp默认值结合 当apache与thinkphp的默认值相结合时,就出现了上述五种URL不同、语句执行结果却相同的情况。 其它代码