1:thinkphp中实现URL隐藏功能
pathinfo配合服务器的的RewriterRule功能,从而实现隐藏index.php,在Apach中只要开启mod_rewrite模块即可
,然后配置网站中的.hessace文件(与入口文件同级)
修改如下:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
2:实例化模型的方法:
模型有数据库模型类(也称基类)还有自定义模型类
(1):new Model("数据表名“),使用传统的new 方式来实例化模型(基类),注意new方法不能实例化自定义的模型
(2):M(name=",class='Model',快捷函数实例化模型,参数name表示数据表名称,class表示自定义模型类,M函数可以再初始化数据表之后在市里画一个自定义的模型类
(3):D(name=",app="),D 函数专门用于实例化自定义模型,参数name表示模型名(不需要Model.class.ph):app 表示项目名,如果调用跨项目的自定义模型,那么该参数是必须的,为空时表示当前项目。
eg:$user=D('User')
$user=M(‘User','UserModel');
M函数的第一个参数表示数据表名,不能为空,第二个参数为自定义模型,如果载入自定义模型,该模型必须位于当前项目
3:模型初始化;由于在自定义模型中不能使用构造函数,所以在判断用户的优先级别和权限的时候有一定的困难,所以thinkphp中提供模型初始化函数_initialize()函数,该方法拥有最高的优先级,所有自定义的类中只要存在该方法,就会先运行该方法。该函数不仅可以在自定义模型中使用,在控制器中也可以进行调用,
4:控制器
thinkphp对控制器的访问是区分大小写的,而且首字母要大写,也可以在配置项中将URL_CASE_INSENSITIVE设置为true,既不区分大小写。在一个项目中通常要建立一个公共的控制器,使之继承自Action基类,这样的话如果要深入改动时只要改动公共控制器即可,其他的自定义控制器只要继承子公共控制器即可
5:display调用模板文件
(1):$this->display():指的是调用当前方法所对应的模板,如果要对应该方法中另外模板文件,只要指定相应的参数即可如:index方法中$this->display("home");则指的是Index文件中的home模板
(2):调用其他控制器动作模板
如Index控制器调用User控制器动作模板:$this->display("User:control");
(3):直接输出模板文件:即直接给出模板文件的路径:
$this->display("./Public/html/head.html");
6:控制器的调用
(1):A函数:用于实例化控制器,相当于new,不仅支持本项目内的控制器还支持跨项目控制器
class IndexAction extends Action{
public function test(){
$obj=A("Member");
$obj->user();
}说明实例化Member控制器,然后调用Member中的user方法
如果要调用不在当前控制器下的方法。则要使用”://"分隔符,如果项目中使用了分组方式,还需要在控制器前加上“/"分隔符,eg:class IndexAction extends Action(){
public function test()
{
$obj=A("Admin://Member");
$obj->index();
}
7:R函数
R函数也是实例化控制器,但是更简洁:R('[项目名://][分组名/]模块名/操作名',array('参数1‘,参数2’))
eg:
class IndexAction extends Action()
{
public function test(){
R("Member/user");
}表示实例化当前项目Member控制器中的user动作
如需要调用跨项目的控制器:eg:
class IndexAction extends Action{
public function test(){
R("Admin://Member/user");
}
}