ThinkPHP是国内著名的php框架之一,利用它,可以达到快速开发的效果。
官网的ThinkPHP快速入门还是有点复杂的,讲了很多东西,自己初次入门还是需要一番功夫的。
虽然ThinkPHP的3.2.x已经出来了,但是框架改动比较大,网络对此的文档也比较少,官网还没有给出其Helloworld的例子。还是建议使用已经比较成熟的ThinkPHP3.1.3。
一、ThinkPHP的下载与部署
1、首先到ThinkPHP的官网(点击打开链接)下载ThinkPHP3.1.3的完整版。这货又小又好用,才1M多一点。
2、解压之后得到了ThinkPHP_3.1.3_full.zip解压到你的php工程目录,相当于在你的工程使用ThinkPHP。如下图,我就对于Apache2.4上的myTP添加了ThinkPHP框架了。
但此时Thinkphp还没有在myTP上运行起来,需要在此工程文件夹下,自己手动新建一个index.php,写入如下的代码:
<?php
define('APP_DEBUG', true);//开启调试状态
require './ThinkPHP/ThinkPHP.php';//载入配置文档
?>
之后,打开浏览器,输入http://127.0.0.1:8081/myTP得到如下图的效果:
其中(1)我的Apache2.4已经被我从80端口改成8081端口,此处请根据自己的需要输入相应的端口
(2)虽然理论上由于有hosts文件的存在localhost与127.0.0.1等价,然而,亲自测试发现localhost不行,只能用127.0.0.1访问
(3)myTP是我的工程名,这里请替换成你自己的工程名。
二、ThinkPHP的Helloworld
1、如上图所示,证明ThinkPHP3.1.3已经配置完成,下面开始开发ThinkPHP的Helloworld。
打开.\myTP\Lib\Action中,自动生成的IndexAction.class.php,把原来的代码删除,改成如下代码:
<?php
class IndexAction extends Action{
//实质上./tpl/Index/index.html也同时是myTP这个目录的主页,可以通过http://127.0.0.1:8081/myTP/直接访问
public function index(){
$this->assign('name', "index.html");//声明./tpl/Index/helloworld.html中{$name}的值为"index.html"
$this->display();//跳转到./tpl/Index/index.html
}
public function helloworld(){
$this->assign('name', "helloworld.html");//声明http://127.0.0.1:8081/myTP/index.php/Index/helloworld中{$name}的值为"世界"
$this->display();//跳转到http://127.0.0.1:8081/myTP/index.php/Index/helloworld
}
}
?>
2、此后在空空是也的.\myTP\Tpl文件夹下,新建一个Index文件夹,此Index文件夹对应.\myTP\Lib\Action中的IndexAction.class.php,文件夹名称Index与文件IndexAction.class.php中的Index形成对应,IndexAction.class.php指代,浏览.\myTP\Tpl下的Index文件夹下的任何.html都要经过IndexAction.class.php,因此,在.\myTP\Tpl文件夹下新建文件夹的名称都不是任意的。
于.\myTP\Tpl\Index\下新建一个index.html写入如下代码:
<!DOCTYPE html>
<html>
<head>
<title>Helloworld</title>
</head>
<body>
<h1>你好,{$name}</h1>
</body>
</html>
再于.\myTP\Tpl\Index\新建一个helloworld.html,同样写入如上的代码,完全一样,一字不改。
此时.\myTP\Tpl\Index\如下图所示:
这两个文件,分别于.\myTP\Lib\Action中两个方法对应,index.html对应index方法,helloworld.html对应helloworld方法。
3、在浏览器中输入如下网址,分别得到的效果:
(1)http://127.0.0.1:8081/myTP/ 注意到,此地址与刚部署ThinkPHP的时,所输入的地址时相同的,然而,ThinkPHP已经检测到,已经创建了一些列的文件夹,所以会自己去找.\myTP\Lib\Action\IndexAction.class.php中index()方法,然后由于$this->display();的一句,直接跳转到.\myTP\Tpl\Index\index.html
(2)http://127.0.0.1:8081/myTP/index.php/Index/index,其实这才是.\myTP\Tpl\Index\index.html的真实网址。第一个、倒数第二个Index是Action,最后一个index是视图index.html
(3)http://127.0.0.1:8081/myTP/index.php/Index/helloworld
可以看到,虽然index.html与helloworld.html这两个视图的代码完全相同,但由于经过了IndexAction.class.php的不同方法,被指派的name值不同,而导致显示的结果不同。
这里说一句,http://127.0.0.1:8081/myTP/index.php/Index/helloworld是.\myTP\Tpl\Index\helloworld.html的唯一地址,将其修改为任意地址都无法访问。
尽管url中的index.php与其各个方法、文件,一点关系都没有!
三、消除难看的index.php
那么有没有方法消除难看的index.php呢?将helloworld.html地址变为http://127.0.0.1:8081/myTP/index.php/Index/helloworld.html呢?答案必须是肯定的,否则用ThinkPHP写出来的网址都难看死了。这里由于要开启重定向,所以修改Apache2.4服务器中的httpd.conf,具体过程如下:
1、打开Apache2.4服务器中的httpd.conf,httpd.conf在类似C:\Apache24\conf这个位置。如下图,搜索mod_rewrite.so,大约158行的位置,删除前面的#,让Apache2.4加载了mod_rewrite.so模块
2、继续在httpd.conf配置文件找到“AllowOverride None”将None改为 All。这点值得注意的是,“AllowOverride None”在文件中能找到几处,但要改的却只有一处,如下图,就是在第267行左右的位置,这个AllowOverride None。
之后Apache2.4就弄完了,重启一下Apache2.4。
3、之后,修改我们的ThinkPHP工程myTP,如下图,在myTP入口文件index.php的同级目录下,利用控制台cmd新建一个没有文件名的.htaccess文件,由于这个文件没有这个文件名,在windows中必须通过控制台新建。
输入如下命令,先用cd命令进入此目录,再用type nul>.htaccess新建。
新建完毕,用记事本打开此.htaccess输入如下内容,保存退出:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
4、再打开.myTP\Conf\config.php改为如下代码:
<?php
return array(
'URL_MODEL' =>2
);
?>
保存退出,就可以在浏览器利用http://127.0.0.1:8081/myTP/Index/helloworld访问.\myTP\Tpl\Index\helloworld.html,如下图,告别难看的index.php