跟着thinkphp官方论坛学TP 三

来源:互联网 发布:金融大数据发展趋势 编辑:程序博客网 时间:2024/04/30 03:45

第五节 初步了解URL如何访问模块操作

 

通过前面的学习,我们已大概地明白了应用模块中的操作与模板如何对应。
而这一节将简单讲解如何通过URL来访问操作。由于我们要循序渐进,所以先只介绍下面章节要用到的知识,要想深入学习还请参看官方手册《URL设计和SEO支持》

TP支持四种URL访问方式,默认是智能模式,所以我们就这种模式进行简要说明。

智能模式下的URL基本结构是这样的
http://servername/appName/moduleName/actionName/params

你可以理解为
http:// 服务器地址 / 入口文件位置 / 应用模块名称 /具体操作名称/ GET变量参数

解释一下上面文字中所译的URL结构,
为什么appname项目名称我将它译成了入口文件位置:通常情况下,我们的入口文件index.php都是放在根目录中,这时项目名称就会被入口文件index.php所替代。在前几节里,我们已知道,一个Action文件就是一个应用模块,而应用模块中的每个方法(function)就是一个具体操作。因此,假如要访问我们实例中的Index模块下的index操作(即IndexAction.class.php里的function index())。地址应该是

http://127.0.0.1/index.php/Index/index

如果入口文件不是在服务器的根目录,而是在myapp目录下,那么入口文件位置就是 Myapp/index.php,此时上面的URL访问就相应要换成
http://127.0.0.1/Myapp/index.php/Index/index

这样说理应很清楚了,不过别让这么多index给混乱咯,对应URL的结构去明白每一个index的函义,同时注意大小写

 

 简单实操:

1 打开Myapp/Lib/Action/IndexAction.class.php文件,在index这个function下再添加一个操作test

  

2 尝试对应URL结构,来访问这个test操作,如果能成功看到echo的文字。则这节我们又学会了多一点知识。

  访问地址:http://127.0.0.1/index.php/Index/test 

 

附加知识点:
去掉URL里面的index.php
要去掉URL里的入口文件index.php,使URL类似这样的形式 http://127.0.0.1/Index/index
可以按官方手册所提供的方法进行如下操作。
1. 确认httpd.conf配置文件中加载了mod_rewrite.so模块
2. AllowOverride None 将None改为 All;允许读取.htaccess文件
3. 打开Myapp/Conf/config.php文件,在配置的数组中添加一行:
'URL_MODEL'=>2,
4. 在入口文件所在的同级目录下,新建一个.htaccess文件,内容是:


   

(windows下可以在rar压缩包里添加一个文本文件,写入内容后,改名为.htaccess。再解压出来就行了) 

如果你的服务器环境支持rewrite,使用http://127.0.0.1/Index/index就可以正常访问到Index模块的index操作了。
此后我们的学习中用到的URL,都是假定你使用了rewrite的情况。
 

遇到过这么一个问题:

做了以上4个步骤后,在访问IndexAction里的test()操作时(链接:http://127.0.0.1/Index/test),程序报无法加载模块test。

原来是conf.ini.php文件里Options Indexes MultiViews FollowSymLinks中的“MultiViews”搞的鬼,设置MultiViews后,在地址栏内输入index.php 可以显示页面,输入index同样可以显示index.php页面。把http://127.0.0.1/Index/test中的Index转换成index.php了。所以后面跟着的test解释成模块。只要把MultiViews去掉,设置成Options Indexes  FollowSymLinks就行。


原创粉丝点击