在TP学习过程中难免会遇到一些大大小小的问题,把这些问题积累下来就可以在以后遇到时能很快速的解决,提高编程效率。

1、让Runtime下的文件格式化:入口文件处:define(‘STRIP_RUNTIME_SPACE’,false);

2、开发时不进行缓存:入口文件处:define(‘NO_CACHE_RUNTIME’,true);

3、ThinkPHP支持四种访问模式:a:普通模式 b:pathinfo模式 c:rewrite模式 d:兼容模式 在配置文件中用URL_MODEL=0(1、2、3)来表示。

4、改变分隔线/:URL_PATHINFO_DEPR。默认为:/

5、跨模块<控制器>调用模板方法:模块<控制器名:模板名(不加后缀)>,如$this->display(‘Index:tt’);

6、跨皮肤调用模板方法:假如Tpl下有skin皮肤,该皮肤下有User文件夹,该文件夹下有sg.html,那么$this->display(‘skin@User:sg’);就跨皮肤调用了。

7、全路径输出:在工程目录<非项目目录>下,建一个Public文件夹,这就是公共文件,可以将js文件放在这里供前后台共用。现在假设Public文件夹下有一个ss.html文件,那么

$this->display(‘./Public/ss.html’);就输出公共文件中的ss.html模板。

8、display的参数:依次为:模板名,编码格式,mimie。如:$this->display(‘./Public/ss.html’,'utf-8′,’text/xml’);

9、系统常量:

__ROOT__ //代表网站的根目录地址

__APP__ //代表项目的入口文件地址

__URL__ //代表当前操作地址

__ACTION__ //代表当前操作地址

__SELF__ //代表当前的URL地址

__CURRENT__ //代表当前模块的模板目录

__PUBLIC__ //代表整个项目的公用目录

__TMPL__ //代表整个项目的模板目录,如Tpl/default/

ACTION_NAME //当前操作名称

APP_PATH //代表当前项目目录

APP_NAME //代表当前项目名称

APP_TMPL_PATH //代表当前项目的模板目录

APP_PUBLIC_PATH //代表项目公共文件目录

CACHE_PATH //项目模板缓存目录

10、配置文件中一些有用的参数:

‘SHOW_RUN_TIME’=>true,//运行时间显示

‘SHOW_ADV_TIME’=>true,//显示详细的运行时间

‘SHOW_DB_TIMES’=>true,//显示数据库的操作次数

‘SHOW_CACHE_TIMES’=>true,//显示缓存操作次数

‘SHOW_USE_MEM’=>true,//显示内存开销

11、halt();//中断程序执行。

12、dump是ThinkPHP里面预定义好的一个函数,具有显示更清晰的作用。

13、读取配置文件其中信息:C,如:$a=C(‘DB_HOST’);这种情况可用于在后台中向管理员显示服务器IP,数据库信息等。

14、自定义Model类并在实例化模型<模型就是数据库操作类>时使用,如:

a、在工程目录下的home<前台文件夹>下的Lib下的Model下建立一个IndexModel.class.php,然后里面写一个方法play,此方法循环输出1至10。

b、在Action中的方法里:

$index=M(‘index’,'IndexModel’); //这里可以加上自定义的模型类一起实例化

$index->play();

那么会输出1至10。

15、实例化模型可以用D也可以用M,M是快速实例化,且可带参,如M(‘User’,'play’);//play是一个对应的模型类。也可以$user=new UserModel();

16、D方法可以自动检测模型类,不存在时它会抛出一个异常。同时对于已实例化过的模型,不会去重复实例化。默认的D方法只能支持调用当前项目(应用)下面的模型。

17、ThinkPHP的分组功能:如果现在想在前台实合例化后台模型,那么:

$admin=D(‘admin.user’);

dump($admin->find());

将输出后台模型数据,这就是分组功能。
18、CommonAction中的_initialize方法让每一个继承它的类的每个方法都要经过_initialize。think_access表要加个pid(int11)字段。四张表是必须的,但是还需要一张user表,里面字段自定。

19、解决ThinkPHP中使用Smarty然后include方法无效的办法:不是不支持,但是路径没有那么智能,比如Tpl的default下的Task模块下有一test.html文件,那么,请用<{include file=’default/Task/test.html’}>以下为引用的话:

include所包含的文件由file属性来指定,路径相对于template_dir,也就是所如果你在使用smarty的时候设置模板路径template_dir假设为Tpl,那么file的文件就应该相对于Tpl文件来取,就你的例子
{include file=”Public/header.html”}的话,那么header.html要放在Tpl下的Public文件夹下。

其实,在Smarty类中把include函数改一下让它输出路径,那么这问题将很好查找。

20、关联模型:尝试了很多次,它一直提示找不到relation方法,就在准备放弃那一秒,奇迹真的出现了:它可以了,配置还是那个配置,真的未改动,那个配置也没什么怀念的,还是记录一下吧:

UserModel.class.php如下:

<?php

class UserModel extends RelationModel{

public $_link = array(

‘phone’=>array(

‘mapping_type’=>HAS_ONE,

‘foreign_key’=>’uid’

)

)

}

?>

IndexAction.class.php//如下:

public function index()

{

$user=D(‘user’);

$users=$user->relation(true)->find(1);

dump($users);

}

21、关闭ap.php缓存:配置文件中: APP_DEBUG=>true,

22、ThinkPHP中判断为空的方法:<present name=”name”>name已经赋值<else /> name还没有赋值</present>

23、ThinkPHP原生模板中if语句中session判断的问题:

正确使用如下:

<if condition=”$_SESSION['level'] egt 2″>

<a href=”>收藏此人才</a>

</if>

正解:

由于 if 标签的 condition 属性里面基本上使用的是 php 语法,尽可能使用判断标签和 Switch 标签会更加简洁,原则上来说,能够用 switch 和比较标签解决的尽量不用 if 标签完成。因为 switch 和比较标签可以使用变量调节器和系统变量。如果某些特殊的要求下面, IF 标签仍然无法满足要求的话,可以使用原生 php 代码或者 PHP 标签来直接书写代码

<eq name= ”Think.session.disEdit” value= ”1″>。。。。。</eq> 这个没试,但已明白

<if condition=”$_SESSION['disEdit'] eq 1″> 这个是可以的

24、分组模式配置:

//分组模式配置

‘APP_GROUP_LIST’=>’Index,Job,Member,Shop’,

‘DEFAULT_GROUP’=>’Index’,

25、Thinkphp开发时关闭缓存的方法:

因在开发中需要经常修改,从而要经常删除缓存,才能看到效果。

所以为了开发的方便,可以把缓存给去除。

1.找到\ThinkPHP\Common\convention.php和\ThinkPHP\Common\debug.php

2.打开这两个文件找到你想要的设置即可。

debug.php中

‘TMPL_CACHE_ON’=>false, // 默认开启模板缓存

convention.php中‘

TMPL_CACHE_ON’ => false, // 默认开启模板编译缓存 false 的话每次都重新编译模 板

‘ACTION_CACHE_ON’ => false, // 默认关闭Action 缓存

‘HTML_CACHE_ON’ => false, // 默认关闭静态缓存

26、中文字符长度截取:{$vo['title']|mb_substr=###,0,16,’UTF-8′},这是支持中文的,很好用。

27、ThinkPHP2.1中,如果想开启debug后显示页面运行时间,那么要在页面中加入{__RUNTIME__}才可以的。

28、HTML压缩:

TMPL_STRIP_SPACE

这个不是压缩 只是去空白和注释

29、模板后缀设置:‘TMPL_TEMPLATE_SUFFIX’ => ’.tpl’

30、欢迎继续添加…..

 

作者:夏, 潇

本文地址:http://studio.ewe.com.cn/?p=921

转载请注明:EWE工作室 » 关于ThinkPHP的一些编程技巧

关于ThinkPHP的一些编程技巧的更多相关文章

  1. js异步编程技巧一

    异步回调是js的一大特性,理解好用好这个特性可以写出很高质量的代码.分享一些实际用的一些异步编程技巧. 1.我们有些应用环境是需要等待两个http请求或IO操作返回后进行后续逻辑的处理.而这种情况使用 ...

  2. EF – 2.EF数据查询基础(上)查询数据的实用编程技巧

    目录 5.4.1 查询符合条件的单条记录 EF使用SingleOrDefault()和Find()两个方法查询符合条件的单条记录. 5.4.2 Entity Framework中的内部数据缓存 DbS ...

  3. VC多文档编程技巧(取消一开始时打开的空白文档)

    VC多文档编程技巧(取消一开始时打开的空白文档) http://blog.csdn.net/crazyvoice/article/details/6185461 VC多文档编程技巧(取消一开始时打开的 ...

  4. java命名规范和编程技巧

    一个好的java程序首先命名要规范. 命名规范 定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,方便维护等作用 Package 的命名 Package 的名字应该都是由一个小写 ...

  5. 无插件Vim编程技巧

    无插件Vim编程技巧 http://bbs.byr.cn/#!article/buptAUTA/59钻风 2014-03-24 09:43:46 发表于:vim  相信大家看过<简明Vim教程& ...

  6. 从linux内核中学到的编程技巧 【转】

     从linux内核中学到的编程技巧  分类: LINUX 1构建泛型宏 (./linux/include/linux/kernel.h) #define min(x, y) ({ \ typeof(x ...

  7. VB编程技巧推荐

    VB编程技巧推荐   1.zyl910的专栏——理论水平高 用VB写高效的图像处理程序 V2.0 优化分支代码——避免跳转指令堵塞流水线 2.Laviewpbt的专栏 —— 有很多算法的代码,实用性高 ...

  8. 深入理解C#:编程技巧总结(二)

    原创文章,转载请注明出处! 以下总结参阅了:MSDN文档.<C#高级编程>.<C#本质论>.前辈们的博客等资料,如有不正确的地方,请帮忙及时指出!以免误导! 在上一篇 深入理解 ...

  9. 15个提高编程技巧的JavaScript工具

    原文地址:http://www.imooc.com/wenda/detail/243523 JavaScript脚本库是一个预先用JavaScript语言写好的库,它方便了我们开发基于JavaScri ...

随机推荐

  1. Lodop客户端本地和集中打印 [是否安装][操作系统]

    前面有些博文或图片介绍了这两种方式,可能文字太多,耐心看完的人不多,这里简略描述+图片的方式解释一下. 客户端本地打印: 用户访问某网站,用自己本地的打印机打出来. 集中打印方式: 用户访问某网页,用 ...

  2. select,poll,epoll之间的区别

    (1)select,poll实现需要自己不断轮询所有fd集合,直到设备就绪,期间可能要睡眠和唤醒多次交替.而epoll其实也需要调用epoll_wait不断轮询就绪链表,期间也可能多次睡眠和唤醒交替, ...

  3. Spring Boot 2.0 + zipkin 分布式跟踪系统快速入门

    原文:https://www.jianshu.com/p/9bfe103418e2 注意 Spring Boot 2.0之后,使用EnableZipkinServer创建自定义的zipkin服务器已经 ...

  4. iOS 获取本地视频的缩略图

    +(UIImage *)getImage:(NSString *)videoURL { AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:[NSU ...

  5. 【python】python彻底卸载的方法【windows安装版卸载的示例】

    要想彻底干净的卸载python,如果是使用的安装版的话,其实很简单.[windows安装版] 就是点击安装包. 例如,当前你安装的版本是3.6.5,你想要把它卸载掉. 查看python版本的命令: 只 ...

  6. linux系统部署Java程序获取ip时报Caused by: java.net.UnknownHostException: XXXXXXXXXX: XXXXXXXXXX: Name or service not known

    问题一: Caused by: java.net.UnknownHostException: XXXXXXXXXX: XXXXXXXXXX: Name or service not known vi ...

  7. Spring Boot中application.yml与bootstrap.yml的区别(转载)

    说明:其实yml和properties文件是一样的原理,主要是说明application和bootstrap的加载顺序.且一个项目上要么yml或者properties,二选一的存在. Bootstra ...

  8. [Web 前端] 你不知道的 React Router 4

    cp from https://segmentfault.com/a/1190000010718620 几个月前,React Router 4 发布,我能清晰地感觉到来自 Twitter 大家对新版本 ...

  9. 用make编译openCV报错:ts_gtest.cpp:(.text._ZN7testing8internal2RED2Ev+0xf): undefined reference to 'regfreeA'

    解决方案: the cause is the google tests is looking for the generic regex.h but cmake used the regex.h fr ...

  10. Android图片载入框架最全解析(一),Glide的基本使用方法

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/53759439 本文同步发表于我的微信公众号.扫一扫文章底部的二维码或在微信搜索 郭 ...