Thinkphp踩坑指南

前阵子做了个小项目,由于之前一直是原生开发,新项目想借此机会尝试一下新东西,于是乎开始了我的tp踩坑之路。以下是做完整个项目后对于tp的一些个人总结。

1、MVC设计模式

早些时候做过一些iOS开发,对于MVC还是有一定的了解的,至少在理论上个人感觉已经吃透了。但当碰到tp中的MVC时,还是感觉无从下手,自己还是太年轻啊。

面对tp自动创建的Model、Controller和View三个文件夹,一时间不知道该怎么去在里面添加东西。于是乎在网上找了一个别人的开源thinkphp的成品网站,读源码、修改源码、看效果,终于在不懈努力下了解到了MVC的精髓,也掌握了tp中MVC的奥秘。

之前理解的MVC是所有的东西都用同一种语言去构建,包括view和model。但实际上,MVC可以分别是不同的语言构建的。用PHP网站的开发来说,M是数据库,V是html页面,C自然就是联系二者的PHP源代码(大致就那么个意思)。

其实我们在做网站、应用开发的时候,一直在使用这种设计模式,只是一直专注于语言,而没有去注意这些设计上的细节。比如用java做图形界面的开发,M依旧是数据库,V则是构成基本图形界面的xml文件,C自然是我们写的java文件了。

依照这个思路,不难得出tp中Model中放置的就是有关数据库连接的文件,Controller中放置的就是我们PHP逻辑代码,View中自然就是html文件了。只不过tp帮我们将整个设计进行了一次封装,同时也规定了一些基本的书写规则。这不禁让我想起了那句对于框架的总结:

You write code,and framework uses your code

2、关于Model中的数据

不得不说tp的封装很到位,尤其是在数据库查找这块帮我们省去了不少的麻烦。
最初不理解这部分是总想着我们需要在里面写点什么吧,后来发现我们能想到的tp都帮我考虑过了,并且已经做好了。Model类中只需要创建一个与数据库中表明相同(不完全,需要根据tp提供的命名规范来)的文件,并创建一个相应的空的类即可。然后我们就可以愉快地与数据库打交道了,所有的增删改查以及实图等功能都已经封装成了一个个方法,在Controller中创建Model类并直接调用即可。

3、thinkphp中的分页

有了数据,直接通过smarty的语法直接放在View中的html中即可。但前端上面还有一个比较麻烦的事情就是分页,好在thinkphp已经帮我们做好了分页的功能,只需要我们去调用就可以了。
但是,问题来了。前端在之前就写好的,包括分页的样式也是,如果要改成tp中提供的样式类名会影响其他样式,而且不同的页面的分页样式也不同。为了解决这个问题,那么自然就想到直接去改tp的分页部分的源码。大家毕竟都是学过PHP的人,改起来自然没什么压力,而且完全不存在之前想象中修改框架源码会对框架整体造成影响的问题。这得益于tp的 模块化 这一设计理念,各个模块之间相互独立,从而减少对项目整体的影响,降低了耦合度。

4、thinkphp中的行为

最初对照着官方手册看这一部分的时候是一头雾水,根本没明白讲的内容。经过查看一些资料,了解到AOP,结合UML中的时序图的概念总算是有点头绪。
其实可以将tp中的行为想象成一种面相过程的编程方式,Behavior只是过程中的一个被调用的函数。当tp运行到某一位置时,发现一个标签(钩子),然后就去找标签对应的行为(即所对应的函数),将函数运行完毕后,接着运行整个程序的后半部分。这样做大大的提高了网站的灵活性,同时也减少了代码的冗余。
在这个项目进行的过程中,到后期意识到忘记了写登陆的功能,于是乎就给app_init标签添加了登陆检测的行为,每当运行到app_init是否处于登陆状态。


以上即为我个人在学习thinkphp中踩到的一些坑和一些总结,希望对大家有所帮助。同时在总结中如果存在什么问题,也希望大家予以指正,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值