zoukankan      html  css  js  c++  java
  • thinkphp 常见问题及 使用总结

    简介:这是thinkphp 常见问题及 使用总结的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。

    class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=339589' scrolling='no'>

    ================= 总结 =================

    ThinkPHP中的BUG及技巧与策:
    1. 模板中不能使用的标签
    {$content} {$i}
    2. If标签
    如:
    试验后总是有想不到的错误, 这样,还不如直接用php
    if(…){ …?>来得块些呢.

    约定:
    1.所有类库文件必须使用.class.php作为文件后缀,并且类名和文件名保持一致
    2.控制器的类名以Action为后缀
    3.模型的类名以Model为后缀,类名第一个字母须大写
    4.数据库表名全部采用小写,

    如:
    数据表名: 前缀_表名
    模型类名: 表名Model 注:这里的表名第一个字母要大写
    创建对象: D(‘表名’) 注:这里的表名第一个字母要大写

    定义控制器类
    class IndexAction extends Action{
    public function show(){
    echo ‘这是新的 show 操作’;
    }
    }
    然后在浏览器里面输入

    http://localhost/myApp/index.php/Index/show/

    定义模型类:
    class 表名Model extends Model{
    [//手动定义字段[可选]
    protected $fields = array(
    ‘id’,
    ‘username’,
    ‘email’,
    ‘age’,
    ‘_pk’=>’id’, //主键
    ‘_autoInc’=>true //是否自增
    )
    ]
    }

    记录的修改:
    $User = D(“User”) // 实例化 User 对象
    $User->find(1) // 查找 id 为 1 的记录
    $User->name = ‘ThinkPHP’ // 把查找到的记录的名称字段修改为 ThinkPHP
    $User->save() // 保存修改的数据
    更新特定字段的值
    $User->setField(‘name’,'TopThink’,'id=1′)
    同样可以支持对字段的操作
    $User->setField(‘score’,'(score+1)’,'id=1′)

    新建记录,方法1:
    $User = new UserModel() //实例化 User 对象
    $User->字段名 = 字段值 //给字段赋值
    $User->add() //添加记录
    新建记录,方法2:
    $data['字段名'] = 字段值; //给字段赋值
    $User = D(‘User’); //实例化 User 对象
    $User->add($data); //$insertId,Add 方法的返回值就是最新操る的主键值,可以直接猎取。
    新增多条记录:
    $User = new UserModel()
    $data[0]['name'] = ‘ThinkPHP’
    $data[0]['email'] =
    $data[1]['name'] = ‘流年’
    $data[1]['email'] =
    $User>addAll($data)

    删除记录
    $User->find(2)
    $User->delete() // 删除查找到的记录
    $User->delete(’5,6′) // 删除主键为 5、6 的数据
    $User->deleteAll() // 删除查询出来的所有数据

    记录查询

    $User->getDbFields() //猎取当前数据字段
    $User->findAll(); //查找所有记录
    $User->findAll(’1,3,8′) //查询主键为1,3,8的记录集
    $User->count() // 猎取记录数
    $User->max(‘score’) // 猎取用户的最大积分
    $User->min(‘score’,'score>0′) // 猎取积分大于 0 的用户的最小积分
    $User->avg(‘字段名’) // 猎取所有记录的字段值的平均值
    $User->sum(‘字段名’) // 统计字段值
    $User->getN(2,’score>80′,’score desc’) // 返回符合条件的第 2 条记录
    $User->getN(2,’score>80′,’score desc’) //还可以猎取最后第二条记录
    $User->first(‘score>80′,’score desc’) //如果要查询第一条记录,还可以使用
    $User->last(‘score>80′,’score desc’) // 猎取最后一条记录
    $User->top(5,”,’score desc’) // 猎取积分最高的前 5 条记录
    $User->getBy(‘name’,'liu21st’) //跟据字段的字段值来查询记录

    $Model = new Model() // 实例化一个 model 对象 没有对应任何数据表
    $Model->query(“select * from think_user where status=1″)

    $objrs = $Model->query(“select * from think_user where status=1″) //自定义查询
    $Model->execute(“update think_user set name=’thinkPHP’ where status=1″) //用于更新和写入数据的 sql 操作,返回影响的记录数

    $User->startTrans() // 启动事务
    $User->commit() // 提交事务
    $User->rollback() // 事务回滚

    模板:

    $this->assign(‘name’,$value); //在 Action 类里面使用 assign 方法对模板变量赋值,无论何种变量类型都统一使用 assign 赋值

    $this->display() // 输出模版文件

    批量赋值
    $array['name'] = ‘thinkphp’
    $array['email'] =
    $array['phone'] = ”
    $this->assign($array)

    $this->display() // 调用 User 模块的 read 操作模版
    $this->display(‘edit’) // 调用 User 模块的 edit 操作模版
    $this->display(‘Member:read’) // 调用 Member 模块的 read 操作模版
    $this->display() // 调用 Xp 主题的 User 模块的 edit 操作模版
    $this->display(‘../Member/read.html’) // 直接指定模版文件的全名

    模板标签:

    { } 或 {// 注释内容 } //模板注释
    {$user['name']} //输出数组变量
    {$user:name} //输出对象的属性

    为了方便模板定义,无论输出的模板变量是数组还是对象,都可以用下列统一方式输出:
    {$user.name}
    如果是多维数组或者多层对象属性的输出,请使用下面的定义方式:
    {$user['sub']['name']}
    {$user:sub:name}

    使用函数:
    格式:{$varname|function1|function2=arg1,arg2,### }
    说明:
    { 和 $ 符号之间不能有空格 ,后面参数的空格就没有问题
    ###表示模板变量本身的参数位置

    细叱变量
    {$Think.server.script_name } //取得$_SERVER 变量
    {$Think.session.session_id|md5 } // 猎取$_SESSION 变量
    {$Think.get.pageNumber } //猎取$_GET 变量
    {$Think.cookie.name } //猎取$_COOKIE 变量
    系统常量
    {$Think.const.__FILE__ }
    {$Think.const.MODULE_NAME }
    特殊变量 ,由 ThinkPHP 系统定义的常量
    {$Think.version } //版本
    {$Think.now } //现在时间

    块捷输出
    {:function(…)} //执行方法并输出返回值
    {~function} //执行方法不输出
    } //输出 Session 变量
    {&var} //输出配置参数
    {%var} //输出语言变量
    {.var} //输出 GET 变量
    {^var} //输出 POST 变量
    {*var} //输出常量

    包含外部文件
    // 用变量控制要导入的模版
    // 使用一个完正的文件名包含

    循环输出
    iterate 还有其它的别名,包括 volist,resultset,sublist

    模版赋值:
    $User = D(‘User’)
    $list = $User->findAll()
    $this->assign(‘list’,$list)

    模版定义:

    {$vo.name}

    注意 name 和 id 表示的含义
    // 输出 list 的第 5~15 条记录

    {$vo.name}

    // 输出偶数记录

    {$vo.name}

    // 输出 key

    {$k}.{$vo.name}

    //子循环输出

    {$sub.name}

    Switch 标签

    value1
    value2
    default

    其中 name 属性可以使用函数以及细叱变量,例如:

    admin
    default

    也可以对 case 的 value 属性使用变量,例如:

    admin
    member
    default

    ThinkPHP中FCKeditor编辑器的使用

    前段时间一直为TP寻找好用的在线编辑器而苦恼,经过多次尝试与修改后,终于成功地将编辑器集成到Thinkphp里面。而且可以用直接上传和ajax两种方式处理内容。为了给一些还没能成功地集成fckeditor的同侪们一些启发与帮助,兹将我的经验与体会描述如下:
    应用目的:将FCKeditor编辑器集成到Thinkphp中,使用户能够在线像编辑Word一样处理即将发表的文字与图像。
    应用软件与环境:apache服务器2.0以上版本,PHP版本5.0以上,mysql5.0以上;Thinkphp版本1.5或以上,Fckeditor版本2.x。
    应用步骤:
    1、下载FCKeditor2.x版本,将解压后的文件夹FCKeditor复制到ThinkPHP文件夹下的Vendor目录下,以便符合THinkPHP的第三方类库引入规则。
    2、修改参数:
    首先,用EditPlus等软件打开FCKeditor目录下的fckeditor_php5.php文件,找到第130行。出现内容如下:

    public function __construct( $instanceName )

    {$this->InstanceName
    = $instanceName ;
    $this->BasePath= ‘ ‘ ;

    $this->Width
    = ‘900′;

    $this->Height
    = ‘400′;

    $this->ToolbarSet
    = ‘Default’ ;

    $this->Value
    = ‘ ’;
    $this->Config
    = array() ;

    }
    public function __construct( $instanceName )

    {

    $this->InstanceName
    = $instanceName ;

    $this->BasePath
    = ‘/bm/ThinkPHP/Vendor/FCKeditor/’ ;

    $this->Width
    = ‘900′;

    $this->Height
    = ‘400′;

    $this->ToolbarSet
    = ‘Default’ ;

    $this->Value
    = ”;
    其中,最关键的就是将Basepath设置好。里面填写的就是fckeditor_php5.php文件相对于网站文档根目录(document root)的路径。其实这就是用以表征FCKeditor编辑器相对根目录的路径。比如服务器的文档根目录最下级是htdocs/或www/,项目名为 project,project项目文件夹下有Thinkphp系统文件包与项目文件包myapp。而且服务器没有对该项目设置虚拟主机的话,此时的文档 根目录仍是www/或htdocs/,那么应该是$this->BasePath=’/project/ThinPHP/Vendor /FCKeditor/’;
    若是设置了虚拟主机,即将project变为虚拟的文档根目录,通过某一域名能够直接访问网站项目的话,那么此时,
    $this->BasePath=’/ThinPHP/Vendor/FCKeditor/’;
    其他的参数如宽度与高度可以填或不填,若填下的话就是编辑器的默认高与宽。InstanceName是编辑器所在标签的id与name,此时不用理会。其他参数也不用理会。
    其次,在FCKeditor\editor\filemanager\connectors\php\下面找到config.php文件,打开它,找到30与34行。需要改写的参数如下:$Config['Enabled'] = true ;
    $Config['UserFilesPath'] = ‘ ’ ;
    其中,第一个参数应该设为true.默认是true.第二个参数填写的是上传文件的路径,比如要显示的图片等。我们在project目录下建立一个 uploads文件夹,那么$Config['UserFilesPath'] = ‘ /project/uploads/ ‘;路径规则与上一个basepath一样。要是project是虚拟文档根目录的话,那么$Config['UserFilesPath'] = ‘ /uploads/ ‘;
    3、应用程序:
    比如在myapp项目中Lib目录下IndexAction.class.php控制器类中的index方法中,当访问该程序时,输出的模板网页里有 form表单,要求用户输入一篇文章,那么就可以用到编辑器.代码示例如下,只显示与fckeditor有关的代码,其他代码会略。
    首先是服务器程序:
    public function index()
    {……//其他代码
    vendor(”FCKeditor.fckeditor”);//包含FCKeditor类库,TP引入第三方类库的系统方法,其路径是相对于vendor目录来说的。
    $editor= new FCKeditor(); //实例化FCKeditor对象
    $editor->Width=’980′;//设置编辑器实际需要的宽度。此项省略的话,会使用默认的宽度。
    $editor->Height=’400′;//设置编辑器实际需要的高度。此项省略的话,会使用默认的高度。
    $this->Value=”;//设置编辑器初始值。也可以是修改数据时的设定值。可以置空。
    $editor->InstanceName=’comment’;//设置编辑器所在表单内输入标签的id与name,即<input& amp; gt;标签的id与name。此处假 //设为comment.此处不可省,也要保持唯一性。表单上传到服务器处理程序后,即可通过$_POST['comment']来读取。
    $html=$editor->Createhtml();//创建在线编辑器html代码字符串,并赋值给字符串变量$html.
    $this->assign(’html’,$html);//将$html的值赋给模板变量$html.在模板里通过{$html}可以直接引用。
    …….//其他代码,包括输出模板。
    }
    其次是对应的html模板即index 文件。只需要在需要的地方插入编辑器即可,其他代码与一般的<form>写法一样。
    …….<!�其他html代码 �>
    <div>
    <form id=”commentform” name=”commentform” action=””>//action里填写表单处理程序,如’__APP__/Index/check’。 指的是IndexAction类下的check()方法来处理提交的表单数据。
    <table style=”100%;”>
    <tr>
    <td style=”text-align:left;”>添加新评论:
    </td>
    </tr>
    ……//其他表单填写项
    <tr>
    <td > {$html}</td>
    </tr>
    <tr>
    <td><input type=”submit” value=”提交评论” >
    </td>
    </tr>
    </table>
    </form>
    </div>
    到这里, 已经可以用了。在表单处理程序里像通常处理表单元素那样就行。但是,有的时候项目移植后,上传的图片等链接路径会被错误编译,以致不能正确显示图片等东 西。通常是双引号解析错误,我还没有解决。要想不出错的话,可以采取ajax的方式处理表单数据。不过在进行ajax处理之前,要先用一段js代码将编辑 器中的值赋给表单中 name是instacename的值的表单元素。比如,本项示例中要用ajax对表单进行处理的话,index模板文件中必须在表单处理前运行的一段 js代码为:
    …….//其他js代码
    var editor=FCKeditorAPI.GetInstance(’comment’);//comment是设置的instanceName值.
    document.commentform.comment.value=editor.EditorDocument.body.innerHTML; //将编辑器中内容处理后的源代 码 //赋值给commentform表单的comment 属性元素值。
    ……//其他js代码
    注:个人认为xajax比较不错,只需要将主要精力花在后台程序上。我也是用xajax进行数据处理的。前台代码很简单。

    爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

    http://biancheng.dnbcw.info/php/339589.html pageNo:8
  • 相关阅读:
    ACM/ICPC 之 中国剩余定理+容斥原理(HDU5768)
    ACM/ICPC 之 三维计算几何+暴力枚举+判重(HDU5839)
    ACM/ICPC 之 有流量上下界的网络流-Dinic(可做模板)(POJ2396)
    ACM/ICPC 之 Dinic+枚举最小割点集(可做模板)(POJ1815)
    ACM/ICPC 之 DP解有规律的最短路问题(POJ3377)
    ACM/ICPC 之 DFS+SPFA-贪心+最短路(POJ2679)
    ACM/ICPC 之 靠墙走-DFS+BFS(POJ3083)
    maven的setting.xml配置文件详解(中文)
    高性能、高可用的分布式架构体系(有启发的)
    各种数据库再spring中的配置(转载)
  • 原文地址:https://www.cnblogs.com/ooooo/p/2246152.html
Copyright © 2011-2022 走看看