资源描述
ThinkPHP入门文档
一、 下载与安装
1、从ThinkPHP官网上下载一个相对稳定的版本,这里推荐3.0版本。
2、下载后的压缩包中有个ThinkPHP文件夹,我们要做的就是把这个文件夹直接拷贝 到自己项目的根目录下。
3、 创建入口文件
通常一个网站项目都会分为前台与后台两个部分,所以这里我们需要创建2个入口 文件,但在此之前,我们要建立好目录。在项目根目录下分别创建以下目录:
Admin 存放所有后台文件
Home 存放所有前台文件
Public 存放所有公共资源
Upload 存放用户上传的资源
下面开始正式创建入口文件了,入口文件的意思就是,所有的操作必须基于这个文件。首先,我们在Home目录中,新建一个index.php文件来作为网站前台的入口文件,这个文件中只需包含下面的代码(红框部分)就行了。
然后可以试着运行下这个文件,在浏览器中输入 http://localhost/framedemo/Home/index.php
如果能看到下面的结果,就表示入口文件创建成功了。
这里要注意下,thinkphp在创建入口文件的过程中,同时也会在我们的项目中自动生成一些目录,它的目录结构如下:
Admin中入口文件的创建与此类似,这里不再赘述。
二、 代码编写
Thinkphp中数据的展示将不再放在php中,而是由html模版代替。所以Thinkphp中代码的编写主要基于两种文件,一种是html类型的模版文件,一种是php类型的后台处理文件,这点跟Struts框架很类似,html模版文件相当于jsp,而php则相当于action。另外,还有一个地方也需要格外注意,就是文件的命名。下面通过表格来看下两种文件的命名方式。
php文件
html模版文件
文件名
类名+Action
php类中的方法名
后缀名
.class.php
.html
所在目录
/Lib/Action
/Tpl/default/php类名
上面这种命名方式与Struts2.x的动态配置也如出一辙,都秉承了一个重要的原则,即"约定大于编码"。
注意:所有的控制器必须继承Action类,该类位于/ThinkPHP/Lib/Core/目录下
三、 导入第三方类库
thinkphp框架中,导入类库有两种方式,import和vendor。
他们的区别如下:
import:主要导入以.class.php结尾的类库和文件
vendor:默认的导入路径为 ThinkPHP系统目录/Vendor 目录,默认后缀为.php 。
为了引用上的方便,我们通常将第三方类库统一放在ThinkPHP系统目录/Vendor 下面,然后通过下面的方式来导入:
vendor("目录名.文件名");
注意:这里的文件名不用包含后缀,如果文件名去除后缀后还包含了.号,则点号可以用#号来代替。
四、 传递参数
在类名/方法名的后面直接带上参数值即可,不用写参数名,格式如下:
类名/方法名/参数1/参数2/…
多个参数之间默认以/来分隔,分隔符在配置文件中可以更改。
五、 获取url参数
1、 获取get方式参数
$_GET["_URL_"][下标];
这里的下标通常从2开始,0 表示类名,1 表示类中的方法名。
2、 获取post方式参数
$_POST["表单中的元素名称"];
六、 页面跳转
1、redirect方式
redirect($class,$method,$params=array(),$delay=0,$msg="")
参数含义如下:
$class :类名
$method :方法名
$params :参数
$delay :延时,单位秒
$msg :跳转过程中的提示信息
七、 将信息输出到模版
php的action中向模版输出信息可以通过下面这种方式:
1、设置模版变量
$this->assign($result, $list);
$result : 模版变量名
$list : 数据
这种方式与java中的的request.setAttribute(key,value);非常类似。
但是也有个区别,注意这里的$result参数,它既可以是一个字符串变量,也可以是一个数组变量,如果是数组变量,则无须传入第二个参数。示例如下:
//采用数组方式输出多个变量
$tplArray = array();
$tplArray[$result] = $list;
$tplArray["pageStr"] = $pageStr;
$this->assign($tplArray);
2、 输出
$this->display();
八、 模版中获取后台数据
1、字符串型数据
{$模版变量名称}
2、 数组型数据
<volist name="模版变量名称" id="循环变量" offset="输出数据的起始位置,默认0" length="输出多少行数据" key="循环索引,默认i" empty="数据为空时显示的信息">
{$循环变量.字段名称}
</volist>
3、 判断模版变量是否为空
<empty name="模版变量名称">为空</empty>
<notempty name="模版变量名称">不为空</notempty>
与else合并用法
<empty name="模版变量名称">为空<else/>不为空</empty>
4、条件判断之if
<if condition="具体条件">
<elseif condition="具体条件"/>
<else/>
</if>
5、条件判断之switch
<switch name="模版变量名称">
<case value="变量值,多个值之间用|分隔" break="是否退出,默认1">
输出内容
</case>
<default/>默认情况
</switch>
6、日期格式化
{$日期变量|date="Y-m-d H:i:s",###}
7、数值格式化
{$数值|number_format=小数位数}
8、在模版中定义变量
<assign name="变量名" value="值" />
9、变量比较
在thinkphp框架中,if和eq都可以用于变量的比较。
区别在于:
if标签仅用于单个变量和一个常量的比较,而eq标签不仅可以比较单个变量和一个常量,还可以比较两个变量,这点请切记!
示例:
比较单个变量
<if condition="$dir.goods_dir_id eq 10000">
</if>
比较两个变量
<eq name="dirChild.dir_pid" value="$dir.goods_dir_id">
</eq>
注意点:name属性里不用加$符号,而value属性需要加上$符号。
10、导入模版文件
Thinkphp模版中通过<include>标签来导入模版文件,示例:
<include file="类名:方法名" />
如果导入的模版文件与主文件属于同一个模块,则file属性中的类名与冒号可以省略。
注意点:如果被导入的模版中仅仅是包含了一些静态信息,那么通过上面这一步,模版中的内容应该就可以成功载入了,但是,很多情况下,被导入的模版包含的信息是动态的,这个时候,我们需要在后台为导入的模版提供相关数据,方式如下:
R("类名/方法名",参数);
这个方法的意思就是,在本类中调用其它类中的方法。
11、模版中获取session
{$_SESSION.session名称}
九、 基础配置
在入口文件所在目录中,有一个Conf目录,该目录下有个config.php文件,用户自定义的配置都写在该文件中。
/* 数据库配置 */
"DB_TYPE" => "mysql", //使用的数据库类型
"DB_HOST" => "192.168.1.111", //数据库主机
"DB_NAME" => "logomo", //数据库名
"DB_USER" => "root", //数据库账号
"DB_PWD" => "admin", //数据库密码
"DB_PORT" => "3309", //数据库端口
/* 程序配置 */
"TOKEN_ON" => true, //是否开启令牌验证
"URL_MODEL" => 3, //URL模式:0普通模式 1PATHINFO 2REWRITE 3兼容模式
"URL_PATHINFO_DEPR" => "/",//PATHINFO URL 模式下,各参数之间的分割符号
"DEFAULT_THEME" => "default", //默认模板主题
"URL_HTML_SUFFIX" => ".html", //URL伪静态后缀设置
"DEFAULT_CHARSET" => "utf-8", //默认输出编码
"DEFAULT_TIMEZONE" => "PRC", //默认时区
//数据返回格式,默认AJAX,可选JSON、XML ...
"DEFAULT_AJAX_RETURN"=> "JSON",
"DEFAULT_APP" => "/framedemo", //设置项目名称
/* 缓存设置 */
//关闭模板编译缓存,false表示每次都重新编译模板
"TMPL_CACHE_ON" => false,
"ACTION_CACHE_ON" => false, //默认关闭Action 缓存
"HTML_CACHE_ON" => false, //默认关闭静态缓存
"HTML_CACHE_TIME" => 60, //静态缓存有效期
"HTML_READ_TYPE" => 0, //静态缓存读取方式 0 readfile 1 redirect
"HTML_FILE_SUFFIX" => ".shtml", //默认静态文件后缀
/* 模版标签设置 */
"TMPL_L_DELIM" => "{", //模版中普通标签开始标记
"TMPL_R_DELIM" => "}", //模版中普通标签结束标记
/* 错误设置 */
//错误显示信息,非调试模式有效
"ERROR_MESSAGE" => "您浏览的页面暂时发生了错误!请稍后再试~",
"ERROR_PAGE" => "", // 错误定向页面
/* 网站设置 */
"SITE_TITLE" => '标镜网',//网站title
十、 隐藏入口文件
假定原访问地址为:
http://localhost/logomirror/Home/index.php/User/showUser
实现效果:
http://localhost/logomirror/Home/User/showUser
即隐藏入口文件index.php。
实现步骤:
1、 修改Apache中的httpd.conf文件
1) 、开启mod_rewrite.so 模块
将LoadModule rewrite_module modules/mod_rewrite.so这句话前面的#去掉即可。
2) 、修改AllowOverride属性
找到类似于下面这句话,
<Directory "D:/phpplatform/Apache Software/Apache2.2/htdocs">
即apache服务器部署项目的根目录,这个标记里面有个AllowOverride 属性,它的本来属性值是None,我们需要把它改为FileInfo Options。
2、 添加.htaccess文件
在入口文件的所在目录中,即与入口文件平级处,添加一个.htaccess文件,文件的内容为:
Options +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ 入口文件名称/$1 [QSA,PT,L]
</IfModule>
注意:
Windows环境中如果无法直接创建.htaccess文件,我们可以绕个弯路,先随便创建一个文本文件,然后另存为.htaccess类型即可,如下图:
3、 更改url访问模式
在config.php配置文件中,将URL_MODEL的值改为2,即REWRITE模式。
至此,项目的入口文件成功隐藏。效果如下:
十一、 模版常用系统常量
1、获取项目名称
{$Think.config.DEFAULT_APP}
DEFAULT_APP的内容由我们在config.php这个文件中事先配置。
2、 获取当前访问的类名
{$Think.MODULE_NAME}
3、 获取当前访问的方法名
{$Think.ACTION_NAME}
4、获取入口文件的根目录名称
{$Think.APP_NAME}
5、 获取入口文件根目录的绝对路径
{$Think.APP_PATH}
十二、 自定义错误页面
1、404错误页面
404表示请求的资源不存在,thinkphp框架通过在action中定义一个_empty方法来实现404错误页面的定制,该方法中只需要一个跳转语句就可以了,如下:
header("Location:错误页面所在路径");
注意:我们通常是在一个公共的action中定义_empty方法,其它action只要继承这个公共的action就可以了。
2、500及其它错误页面
500表示服务器内部产生了错误,再通俗一点讲就是,程序错误。
要想定制500错误页面,我们需要修改config.php这个配置文件,在这个文件中加入下面这句话:
"ERROR_PAGE" => "错误页面所在路径"
路径最好用绝对路径。
这样,当我们的程序发生错误时,系统就会自动跳转到我们自定义的页面。但是有个前提,就是必须关闭调试模式,否则无法实现上面的效果。
define("APP_DEBUG",false);
展开阅读全文