最新ThinkPHP学习笔记.docx
- 文档编号:6787345
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:15
- 大小:22.81KB
最新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.
所有的函数都可以这样用。
3.
{~show()}
执行函数但不输出用~后面加函数。4.在模板中使用运算符:
例如:
{$a+$b}{$a-$b}等等。
5.包含文件:
header"/>
cccccccccc
cccccccccc
cccccccccc
cccccccccc
cccccccccc
footer"/>
其中Public模块为Tpl文件夹下,Public文件夹中有文件header.html和footer.html.也就是要包含的文件。
模板如何引用自己的静态资源?
../public:
/TPtest/test2/Admin/Tpl/Public
cccccccccc
cccccccccc
../Public表示当前应用中(模板)Tpl下的Public文件夹。
模板替换仅仅在$this->display()所要加载的模板中有效,在其他文件中一概无效。
可以在模板文件中使用任何的php代码。
主要有两种格式:
php?
>和
for标签的使用方法:
{$i}
if标签的使用方法:
#ccc">{$i}{$i}
比较标签:
等于:
eq
不等于:
neq
大于等于:
eqt
小于等于:
elt
小于:
lt
大于:
gt
恒等于:
heq
不恒等于:
nheq
在模板中的标签中,只有
三元运算符:
1.{$status?
'正常':
'错误'}
2.{$info['status']?
$info['msg']:
$info['error']}
标签嵌套:
系统内置的标签中,volist、switch、if、elseif、else、foreach、compare(包括所有的比较标签)、(not)present、(not)empty、(not)defined等标签都可以嵌套使用。
例如:
1.
2.
3. {$sub.name}
4.
5.
上面的标签可以用于输出双重循环。
默认的嵌套层次是3级,所以嵌套层次不能超过3层,如果需要更多的层次可以指定TAG_NESTED_LEVEL配置参数
模板继承:
模板继承其实并不难理解,就好比类的继承一样,模板也可以定义一个基础模板(或者是布局),并且其中定义相关的区块(block),然后继承(extend)该基础模板的子模板中就可以对基础模板中定义的区块进行重载。
因此,模板继承的优势其实是设计基础模板中的区块(block)和子模板中替换这些区块。
每个区块由
1.
2.
3.
4.首页
5.
6.夏日的街头,吊带装、露背装、一步裙、迷你裙五彩缤纷、争妍斗艳。
爱美的女孩们不仅在服饰搭配上费尽心机,饰品的选择也十分讲究。
可惜在商店里买的项链、手链、手机挂坠等往往样式平淡无奇,还容易出现雷同现象。
7.
8.服饰□学习用品□食品□休闲娱乐□小饰品□论坛
9.
10.
11.
(2)缺乏经营经验
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 ThinkPHP 学习 笔记