• ThinkPHP使用技巧经验总结


    add方法返回主键(id)的值
    在往数据表中添加数据时调用add方法,默认返回值就是刚添加的id值,就不用再去查询了.

    save方法返回值的判断
    在修改数据时,如果修改成功返回的是1,不成功则是0,如果没用做任何的修改就保存了,那么返回值还是0.

    打印sql语句
    $User = D('User');
    $User->select();
    echo $User->getLastSql();或者echo $User->_sql();
    获取最后执行的sql语句,方便查看调试

    跨模板主题调用模板
    假如Tpl下有new主题,该主题下有User文件夹,文件夹下有index.html
    你当前的模板主题是Tpl下的default,那么可以用$this->display('new:User:index');
    或者用全路径输出$this->display('./Tpl/new/User/index.html');

    路由规则^符号的使用
    这个符号在手册中没有提及,但是作用却不可忽视。
    用法:'user/^getlist|tag' => 'user/index'
    作用:在user模块中,除了getlist和tag方法,其他存在的方法全部指向index方法。参数之间用|间隔
    这样可以屏蔽一些不想让用户访问到但是又必须定义成public的方法

    model中的前置和后置操作

    发现ThinkPHP里面隐藏了几个有用的方法, model层里面有几个很有用的方法并没有出现在手册里, 下面我列举一些.


    1.  _after_find  和  _after_select:查询成功的回调方法
        用法: 
        在自定义的model中重写

    class ArticleModel extends Model {
    
        protected function _after_find(&$data, $option) {
            switch ($data['status']) {
                case -2:
                    $data['status_text'] = '待审核';
                    break;
                case -1:
                    $data['status_text'] = '已删除';
                    break;
                case 0:
                    $data['status_text'] = '禁用';
                    break;
                case 1:
                    $data['status_text'] = '正常';
                    break;
            }
        }
    
        protected function _after_select(&$resultSet,$options) {
            foreach ($resultSet as &$data) {
                $this->_after_find($data, $options);
            }
        }
    }

    这样在使用的时候, 你用
    $list = D('Article')->select();

    $info = D('Article')->find($id);

    就会自动根据status字段添加status_text字段

    还有一下方法, 大家可以自己测试

    2. _after_delete , _before_delete
            : 在删除操作之后 或 之前, 根据数据做一些操作 (如: 删除分类的时候 同时删除分类下的文章)
    3. _after_insert , _before_insert
            : 在插入之后 或 之前, 根据数据做一些操作 (如: 插入文章成功 自动让分类统计+1)
    4. _after_update , _before_update
        : 在更新之后 或 之前, 根据数据做一些操作 (如: 重新计算分类文章总数)

  • 相关阅读:
    枚举求解,也叫暴力破解
    多线程之线程的中止
    beginners with the Multithreading programming
    EditBox control Update Problem (A CString type EditBox control in a loop cannot be updated immidiately)
    有关多线程的一些技术问题
    多线程编程基础知识
    VC的若干实用小技巧 (如何干净的删除一个类)
    进入MFC讲坛的前 (Window 程序详细分析)
    Multithreading using MFC in Plain English: Part I
    关于在VS2005环境下无法从源视图切换到设计视图的解决方案
  • 原文地址:https://www.cnblogs.com/mr-amazing/p/4933760.html
Copyright © 2020-2023  润新知