zoukankan      html  css  js  c++  java
  • 关于ThinkPHP的一些编程技巧

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

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

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

    3ThinkPHP支持四种访问模式:a:普通模式 bpathinfo模式 crewrite模式 d:兼容模式 在配置文件中用URL_MODEL=0(123)来表示。

    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模板。

    8display的参数:依次为:模板名,编码格式,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,//显示内存开销

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

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

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

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

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

    b、在Action中的方法里:

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

    $index->play();

    那么会输出110

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

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

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

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

    dump($admin->find());

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

    19、解决ThinkPHP中使用Smarty然后include方法无效的办法:不是不支持,但是路径没有那么智能,比如Tpldefault下的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,

    22ThinkPHP中判断为空的方法:<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.找到ThinkPHPCommonconvention.phpThinkPHPCommondebug.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的一些编程技巧

  • 相关阅读:
    Java的Regex --正则表达式
    Java的包装类
    类的始祖Object
    abstract和interface关键字介绍
    内部类
    Accumulation Degree [换根dp,二次扫描]
    牛客练习赛61 [口胡]
    CF1334G Substring Search [bitset,乱搞]
    CF1175F The Number of Subpermutations [哈希,乱搞]
    CF793G Oleg and chess [线段树优化建边,扫描线,最大流]
  • 原文地址:https://www.cnblogs.com/meetrice/p/3547803.html
Copyright © 2011-2022 走看看