thinkphp 常见有关问题及 使用总结
程序员文章站
2023-12-30 13:38:46
...
thinkphp 常见问题及 使用总结
=================?? 总结 ?? =================
?
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,即$html=$editor->createhtml();//创建在线编辑器html代码字符串,并赋值给字符串变量$html.
$this->assign(’html’,$html);//将$html的值赋给模板变量$html.在模板里通过{$html}可以直接引用。
…….//其他代码,包括输出模板。
}
其次是对应的html模板即index 文件。只需要在需要的地方插入编辑器即可,其他代码与一般的
=================?? 总结 ?? =================
?
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,即$html=$editor->createhtml();//创建在线编辑器html代码字符串,并赋值给字符串变量$html.
$this->assign(’html’,$html);//将$html的值赋给模板变量$html.在模板里通过{$html}可以直接引用。
…….//其他代码,包括输出模板。
}
其次是对应的html模板即index 文件。只需要在需要的地方插入编辑器即可,其他代码与一般的
推荐阅读
-
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)_PHP
-
Thinkphp整合PHPExcel遇到的有关问题总结
-
PHP session常见问题集锦及解决办法总结
-
请教一下thinkphp模板使用函数的有关问题
-
iOS中UITableView使用的常见问题总结
-
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
-
NanoStudio怎么用?NanoStudio使用方法及常见问题
-
PHP开源开发框架ZendFramework使用中常见问题说明及解决方案
-
NanoStudio怎么用?NanoStudio使用方法及常见问题
-
PHP开源开发框架ZendFramework使用中常见问题说明及解决方案