最新ThinkPHP学习笔记.docx
《最新ThinkPHP学习笔记.docx》由会员分享,可在线阅读,更多相关《最新ThinkPHP学习笔记.docx(15页珍藏版)》请在冰豆网上搜索。
最新ThinkPHP学习笔记
Thinkphp
1.单入口原理
访问任何文件都必须通过某一个固定文件,如index.php,这就是单入口原理。
2.XX收录网站的时候,更倾向于目录和静态文件。
3.基础项目中一个模块就是一个文件夹,模块的增删改查操作就是文件夹里对应的文件。
4.在ThinkPHP中,一个模块就是一个类文件,也就是模块文件,而模块的增删改查操作,就是该类文件中的对应的方法。
5.在ThinkPHP中,要增加一个功能模块就是要加一个类文件,即模块文件,要对该模块增加一个操作,就是在该类文件中加一个方法。
6.在PHP中,在回标签(?
>)之后不能有任何输出,包括空格,否则在被包含时可能会报错。
7.为了保险起见,不要加回标签(?
>);
8.在TP中有全局配置文件,这里的配置文件影响每一个应用,但有时候我们需要改变某个应用的配置项。
那么,我们就需要单独为该应用进行配置,这就是局部配置文件,、。
9.局部配置文件的优先级高于全局配置文件。
10.配置文件在项目的conf中。
11.要想读取配置文件中的任何一个选项,可以用一个C()方法。
例如:
echoC('DEFAULT_CHARSET');
12.C()方法用于获取配置文件中的选项。
(大写C);
13.函数跟踪,在学习或观看一个项目时,为了知道某个函数的来源,需要对函数进行跟踪定位。
14.公共函数:
在TP的Common中的common.php中的函数即为公共函数,可以在项目的任何地方使用。
15.局部函数:
在项目应用中的Common中的common.php文件中定义的函数,即为局部函数,该函数只在该应用中有效,在其他应用中不能使用。
16.公共类文件。
17.自定义类文件。
18.如何使用并包含自定义类文件。
Import(‘ORG.Mycls.Person’);
$user=newPerson();
$user->show();
19.定义变量并分配模板;
publicfunctionindex(){
$name="李帅帅";
$age="22";
$this->assign('name',$name);
$this->assign('age',$age);
$this->display();
}
在模板中是这样接收:
{$name}
{$age}
20.定义控制器
在Action文件夹中新建一个UserAction.class.php,即完成一个控制器的定义。
php
classUserActionextendsAction{
publicfunctionindex(){
echo"定义了一个用户模块控制器!
";
}
}
一定要符合命名规范。
21.跨模块调用
即想在Index模块中调用User模块中的index()方法。
classIndexActionextendsAction{
publicfunctionindex(){
R('User/index');
}
}
跨模块调用,要用R()方法。
22.页面跳转
publicfunctionindex(){
$this->success('登录成功!
','add');
}
publicfunctionadd(){
echo"在我这儿添加数据吧!
";
}
其中$this->success('登录成功!
','add');只支持本模块跳转。
23.URL伪静态设置,
'URL_HTML_SUFFIX'=>'html',//URL伪静态后缀设置,如果后面什么都没有,则没有后缀名。
而地址栏显示的就是文件夹格式,有利于XX收录。
24.URL生成,
利用U()方法可以生成地址。
如U(‘add’)可以生成add方法所在的地址。
publicfunctionadd(){
echoU('add');//生成本模块中add的地址。
}
所得的结果为:
/TPtest/test1/admin.php/Index/add;
publicfunctionindex(){
echoU('User/index','id=10&name=user1');
//生成User模块中index的地址,并传递参数。
/TPtest/test1/admin.php/User/index/id/10/name/user1
//$this->success('登录成功!
','add');
}
25.所以跨模块跳转为:
publicfunctionindex(){
$this->success('登录成功!
',U('User/del'));
}
让U()方法生成地址。
26.登录失败跳转:
publicfunctionindex(){
$this->error('登录失败!
',U('User/del'));
}
为error()方法。
27.重定向
没有过渡页面,直接跳转到目标页面。
publicfunctionindex(){
$this->redirect('User/index');
//跨模块重定向。
$this->redirect(‘add’);
//本模块重定向。
}
$this->redirect(‘User/del’,’id=10’);
携带参数重定向,即该方法可以带参数。
重定向用redirect()方法。
28.获取URL参数
echo"
";print_r($_GET);
echo"
";
利用$_GET就可以获取URL参数。
29.URL重写:
a).修改apache配置文件加载rewrite.
b).在.htaccess中写重写规则。
30.页面上能发生跳转的有a连接和表单。
31.URL大小写,
只要在项目配置(全局配置或局部配置文件)中,增加:
1.'URL_CASE_INSENSITIVE' =>true
就可以实现URL访问不再区分大小写了。
1.http:
//serverName/index.php/User/add
2.//将等效于
3.http:
//serverName/index.php/user/add
32.URL模式
修改 | 地址为当前模块下的edit方法。
删除 | __URL__表示当前模块。
33.U()方法用于生成当前方法的地址。
34.统一链接的地址,
U('edit')}">修改 | {:
U(‘edit)}可以统一链接地址,表示生成当前模块下edit方法的地址。
删除 | 35.URL路由,
要使用路由技术,需要在配置文件中开启路由。
1.'URL_ROUTER_ON' => true, //开启路由
2.'URL_ROUTE_RULES' => array( //定义路由规则
3. 'news/:
year/:
month/:
day' => array('News/archive', 'status=1'),
4. 'news/:
id' => 'News/read',
5. 'news/read/:
id' => '/news/:
1',
6.),
路由可以对地址进行伪装,和简化地址。
假地址对应真地址。
客户看到的地址与真实的地址不同。
36.如果要在模板里面使用php代码,需要用模板标签{}。
37.AR操作,
查看最近的一条完整的SQL语句,$m->getLastSql().
插入一条记录:
a).publicfunctioninsert(){
$username=$_POST['username'];
$password=$_POST['password'];
$sql="insertintouser(username,password)values('$username','$password')";
$user=M();
if($user->execute($sql)){
$this->success('添加成功!
',U('index'));
}
}
b).publicfunctioninsert(){
$user=M('User');
$user->create();
if($user->add()){
$this->success('注册成功!
',U('index'));
}
}
AR操作中,增删改查时,表单name属性的值必须与数据表中字段对应相等。
否则操作不成功。
修改一条记录:
publicfunctionedit(){
$id=$_GET['id'];
$user=M('User');
$row=$user->find($id);
$this->assign('row',$row);
$this->display();
}
publicfunctionupdate(){
$user=M('User');
$user->create();
if($user->save()){
$this->success('修改成功!
',U('index'));
}
}
删除一条记录:
publicfunctiondelete(){
$id=$_GET['id'];
$user=M('User');
if($user->delete($id)){
$this->success('删除成功!
',U('index'));
}
}
查看一条记录:
publicfunctionindex(){
$user=M('User');
$rows=$user->select();
$this->assign('rows',$rows);
$this->display();
}
AR操作函数:
$obj->select();查询数据,返回一个二维数组。
函数里可以有id参数,select(3);
$obj->find();查询数据,返回一维数组,而且是返回所有记录的第一条数据。
函数里可以有id参数,find(4);
$obj->delete($id),删除数据,必须指定参数,指定要删除的记录。
添加数据:
$user->create();//创建数据对象data。
$user->add();
把不是表单提交过来的数据插入:
$user=M(‘User’);
$r=$user->create();
If($r){
$user->time=time();//只要给$user设置属性,就会编程数据对象data.
$user->password=md5($user->password);
$user->add();
}
修改一条数据:
$user=M(‘User’);
$r=$user->create();
If($r){
$user->time=time();
$user->save();
$this->success(‘修改成功!
’,U(‘index’));
}
38.CURD操作:
a)$row=$user->order(‘iddesc’)->select();
按id倒序排序的方式显示。
b)$row=$user->order(‘iddesc’)->limit(3)->select();
获取倒序排序的前3条数据。
c)$row=$user->field(‘idusername’)->order(‘iddesc’)->limit(3)->select();
光显示id和username字段的数据。
d)$row=$user->field(‘password’,true)->order(‘iddesc’)->limit(3)->select();
除了password字段外,其余字段全部显示数据。
e)$row=$user->field(‘password’,true)->where(‘id>3’)->order(‘iddesc’)->limit(3)->select();
查询id>3的数据。
Selectif(sex=0,’男’,’女’)sex,count(*)fromusergroupbysex;按照sex字段进行分组,并且如果sex=0则显示男,如果sex=1则显示女。
f)$row=$user->field(‘sex,count(*)’)->group(‘sex’)->select();//分组查询。
如果涉及多表查询,则直接写SQL语句。
其中select()方法必须放到最后,其他方法可以调换顺序,最后select()会自动整理顺序,形成完整的SQL语句。
直接写SQL语句的方式:
1.$m=M();
$sql=selectuser.usernamescore.numfromuser,scorewhereuser.id=score.user_id;
$rows=$m->query($sql);
query()方法用来执行查询语句。
2.$m=M();
$sql=insertintouser(username,password)value(‘user1’,’123’);
$r=$m->execute($sql);
execute()方法用来执行增,删,改语句。
2.CURD连贯操作之添加数据:
$sql=insertintouser(username,password)value(‘user1’,’123’);//内部组建的语句,无需书写。
$user=M(‘User’);
$user->create();
$user->add();
3.CURD连贯操作之删除数据:
a).deletefromuserehereid=5;//删除id=的的记录。
$user=M(‘User’);
$user->delete(5);
b).deletefromuserid>5;//删除id>5的记录。
$user=M(‘User’);
$user->where(‘id>5’)->delete();
c).deletefromuserwhereidin(‘1,3,5’);//删除id为1,3,5的记录。
$user=M(‘User’);
$user->delete(‘1,3,5’);
4.CURD连贯操作之修改数据:
a).updateusersetusername=’user11’,password=’456’whereid=1;
$user=M(‘User’);
$user->create();
$user->save();
b).updateusersetusername=’user12’,password=’234’whereid>1andid<5;
$user=M(‘User’);
$user->create();
$user->where(‘id>1andid<5’)->save();
模型的主要作用是操作数据库。
视图:
模板替换:
__PUBLIC__:
../Public:
__ROOT__:
__APP__:
__URL__:
__ACTION__:
__SELF__:
public:
/TPtest/test2/Public
app:
/TPtest/test2/admin.php
../public:
/TPtest/test2/Admin/Tpl/Public
root:
/TPtest/test2
action:
/TPtest/test2/admin.php/Index/index
url:
/TPtest/test2/admin.php/Index
self:
/TPtest/test2/admin.php
获取内容:
有些时候我们不想直接输出模板内容,而是希望对内容再进行一些处理后输出,就可以使用fetch方法来获取解析后的模板内容,在Action类里面使用
1.$content = $this->fetch();
模板引擎
{$title}在模板中会被解析成:
php
echo$title;
?
>
如果前面没有$的话就没问题。
如{title};
修改定界符:
如果{$title}与js中的{$a}有重复的话,php解析时会报错。
这时可以修改定界符{}为<{}>来解决问题。
系统变量:
$this->assign(‘id’,$_GET[‘id’]);
超全局数组可以不用分配,直接在模板中使用,如:
{$_GET[‘id’]};
{$_POST[‘tot’]}
,这些都不用分配,直接在模板中使用即可。
在ThinkPHP中,所有方法已经默认开启了session_start(),在使用session时无需在开启。
$_SESSION[]也无需分配,直接在模板中使用即可。
系统变量可以这样写:
{$Think.get.id}//获取$_GET里面的id。
{$Think.post.tot}//获取$_POST里面的tot。
1.在模板中使用函数,在定界符中加:
函数就可以使用。
例如:
{:
show()}即在模板中使用控制器中定义的函数show().使用变量是用$,即
{$name}
。
而且该方法只能是该模板中调用该模板所对应的函数中的方法。
例子:
{:
substr(strtoupper($title),0,6)},在模板中使用函数。
2.
{$title|strtoupper|substr=###,0,6},###表示模板变量本身的参数位置。
所有的函数都可以这样用。
3.
{~show()}
执行函数但不输出用~后面加函数。
4.在模板中使用运算符:
例如:
{$a+$b}{$a-$b}等等。
5.包含文件:
header"/>
cccccccccc
cccccccccc
cccccccccc
cccccccccc
cccccccccc