第五节 初步了解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操作。地址应该是
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
- <?php
- class IndexAction extends Action{
- public function index(){
- $array = array();
- $array['name'] = 'thinkphp';
- $array['email'] = 'liu21st@gmail.com';
- $array['phone'] = '12335678';
- $value = 'hello,ThinkPHP';
- $this->assign('array',$array);
- $this->assign('name',$value);
- $this->display();
- }
- public function test(){
- header("Content-Type:text/html; charset=utf-8");
- echo '哈,访问正确!!';
- }
- } // 类定义end
- ?>
2 尝试对应URL结构,来访问这个test操作,如果能成功看到echo的文字。则这节我们又学会了多一点知识。
附加知识点:
去掉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
3 打开Myapp/Conf/config.php文件,在配置的数组中添加一行:
'URL_MODEL'=>2,
在入口文件所在的同级目录下,新建一个.htaccess文件,内容是
- <IfModule mod_rewrite.c>
- RewriteEngine on
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteCond %{REQUEST_FILENAME} !-f
- RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
- </IfModule>
如果你的服务器环境支持rewrite,使用http://127.0.0.1/Index/index就可以正常访问到Index模块的index操作了。
此后我们的学习中用到的URL,都是假定你使用了rewrite的情况。