您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
thinkphp3.1.3学习笔记-第一天
发布时间:2017-04-10 13:10:07编辑:雪饮阅读()
1、入口文件配置:
<?php
define('APP_NAME','Index');//项目名称
define('APP_PATH','./Index/');//项目路径
define('RUNTIME_PATH',APP_PATH.'Temp/');//定义编译目录位置
define('APP_DEBUG',TRUE);//开启调试
include './ThinkPHP/ThinkPHP.php';
?>
注意:runtime这项配置必选的,在3.1.3中此项配置若不存在,runtime目录会被生成到项目目录外部的。
2、运行流程:
http://www.xy.com/index.php?m=Show&a=abc
M:控制器
A:控制器中的方法名
控制器=》方法中读取配置项的值:
echo C('username');
注意:此配置项读取的是入口文件中配置的项目名对应的项目路径下的conf下的配置文件的信息。
3、数据库操作:
数据库信息配置:
\ThinkPHP\Conf\convention.php中进行数据库信息的配置。
或者可以再当前项目路径的conf文件夹下的conf.php中进行配置:
<?php
return array(
//'配置项'=>'配置值'
'DB_HOST'=>'localhost',
'DB_USER'=>'root',
'DB_PWD'=>'123456',
'DB_NAME'=>'empirecms',
'DB_PREFIX'=>'phome_',
);
?>
数据库的普通查询:
$db=M('ecms_article');
$result=$db->select();
dump($result);
后端项目的创建:同入口index.php一样,只是定义了后端的项目配置信息。
如建立admin.php和入口文件处于同一级别目录下。
<?php
define('APP_NAME','Admin');//项目名称
define('APP_PATH','./Admin/');//项目路径
define('RUNTIME_PATH',APP_PATH.'Temp/');//定义编译目录位置
define('APP_DEBUG',TRUE);//开启调试
include './ThinkPHP/ThinkPHP.php';
?>
注意:前台数据库配置文件与后台配置文件不同步。当访问数据库时,若项目路径下的配置文件中没有配置数据库信息,就会默认使用全局的数据库配置信息。
要想同步就需要进行数组合并:
先建立公共配置文件,该配置文件将前台后台的配置文件都包含。
<?php
$config= array(
//'配置项'=>'配置值'
'DB_HOST'=>'localhost',
'DB_USER'=>'root',
'DB_PWD'=>'123456',
'DB_NAME'=>'empirecms',
'DB_PREFIX'=>'phome_',
);
return array_merge(include './Conf/config.php',$config);
?>
但如此以来就需要考虑到两个数组之间的元素的覆盖问题了。
4、自定义函数:
在当前项目路径下有common文件夹下需要建立一个common的php文件,此文件中的所有函数都会被控制器以系统函数的方式直接调用:
<?php
function p($arr){
dump($arr,1,'<pre>',0);
//thinkphp中的dump函数
//参数1:数组
//参数2:是否格式化输出
//参数3:格式化的标签
//参数4:是否以print_r方式输出。
}
?>
控制器端调用:P($_SERVER);
注意:若common文件夹下的存放自定义函数的文件名不是common.php就不会自动加载,此时就需要手动加载,手动加载就需要在当前项目配置文件中进行配置,如:
'LOAD_EXT_FILE'=>'common1',
或者临时性加载,即每使用自定义函数时就临时加载该自定义函数所在的文件:
load('@.common1');//@代表当前项目
此种临时加载只在当前方法里面生效。
模版常量:
__PUBLIC__:指向根目录下的public目录
自定义模版常量:在当前项目下的配置文件中。
'TMPL_PARSE_STRING'=>array('__PUBLIC__'=>__ROOT__.'/'),
Display函数:
This->display();
默认是以当前函数作为显示模版,若传参就以参数值作为模版名来显示页面。
U函数:生成待跳转的url地址。
U(“Index/index”,array(‘aid’=>1,’uid’=>10),’asp’,1,true);
//跳转到Index控制器的index方法中。
//第二个参数是相当于地址栏传递参数一样的功能。
//第三个参数是伪静态后缀,如果没有该参数就按照当前项目的配置文件中的伪静态后缀来
生成。
//第四个参数决定是否立即跳转链接,为1时就立即跳转。
//第五个参数决定生成的url地址中是否包含域名(绝对路径)或者相对路径。
注意:
(1)、默认是以当前配置文件中'URL_MODEL'=>1的配置,此配置为1就是pathinfo的url。为0时就是兼容模式的url。
(2)、伪静态的支持仅仅是pathinfo模式,默认pathinfo伪静态没有开启,可通过'URL_HTML_SUFFIX'=>'xy',配置项于当前项目的配置文件中即可实现伪静态,这样别人就不知道你的程序到底是什么语言写的了。如雪饮这里开启的伪静态后所生成的跳转连接为:
/index.php/Index/index.xy
模版中使用函数:
{:U('Index/index')}
表单的数据接收:
$username=$this->_POST('username');//支持浏览器html防注入
$username=I('username','','htmlspecialchars');
//3.1.3新增方法。
//参数1:要接收的字段名
//参数2:若接收值不存在时的默认值
//参数3:对接收值进行处理的函数,过滤,防html注入
检查表单常量:
IS_POST:若是post提交过来的就会返回true,否则就是false;
$this->isPost();//旧版本thinkphp中所使用。
页面提示:404
该方法可以配合IS_POST一起使用,如遇到非post请求时可以给他抛出该信息。
_404("页面不存在");
数据库操作:
Add方法:
向表中添加数据:$data是一个关联数组。
M('xy')->data($data)->add();
注意:该函数添加完毕数据后会返回被添加表中最新的主键自动增长的id
Delete方法:
删除数据表中的数据,必需指定where条件
$result=M('wish')->where('id > 0')->delete();
$result=M('wish')->where(array('id'=>array('lt',0)))->delete();
Success方法:
该方法可与u方法结合使用。
$this->success("发布成功",U('Show2/abc'));
Error方法:
操作失败后可使用该方法。附加返回之前页面的功能。
$this->error("操作失败!");
Assign方法:
$this->assign(‘a’,111);向模版中分配变量。
模版标签foreach:
{foreach name='wish' item='v'}
{$v.username}
{/foreach}
模版标签:时间格式化
{$v.time | date='Y-m-d H:i',###}
将时间读取后存放置第二个参数###处
Mt_rand(1,5);//返回随机整数。
使用函数:{:此处可以使用任意函数,无论内置还是tp的都可以}
应用分组:
入口文件中配置:
<?php
define('APP_NAME','App');//定义应用组
define('APP_PATH','./App/');
define('APP_DEBUG',TRUE);//开启调试
include './ThinkPHP/ThinkPHP.php';
?>
入口文件中所定义分组的配置文件中配置:
<?php
return array(
//'配置项'=>'配置值'
'APP_GROUP_LIST'=>'Index,Admin',
'DEFAULT_GROUP'=>'Index',
);
?>
进入控制器所在目录中建立对应前台(Index)和后台(Admin)文件夹
并将建立控制器(和文件夹同名的控制器)
访问前台:http://www.xy.com/index.php/Idmin/Index/index(或直接访问域名,因为应用组的配置文件中已经配置了分组访问默认为index)
访问后台:http://www.xy.com/index.php/Admin/Index/index
应用分组-配置项:
应用分组后配置项就是公共的了,若有需要独立的配置项,就需要在公共的conf文件夹下建立对应前台或者后台的文件夹(Index或Admin)并将config.php建立其下,然后和没有分组之前一样配置即可。
应用分组-函数库:
应用分组后函数库变成公共了,若有需要独立的函数库就需要在公共的common文件夹下建立对应前台或者后台的文件夹(Index或Admin)
并将function.php建立其下,然后和没有分组之前一样定义函数即可。
点语法:
'TMPL_VAR_IDENTIFY'=>'array'
//项目配置文件中可以配置点语法为对象或者数组
为了方便模板定义,还可以支持点语法,例如
{$user['name']}// 输出用户的名称
{$user['email']} // 输出用户的email地址
可以改成
{$user.name}
{$user.email}
因为点语法默认的输出是数组方式,所以上面两种方式是在没有配置的情况下是等效的。我们可以通过配置TMPL_VAR_IDENTIFY参数来决定点语法的输出效果,以下面的输出为例:
{$user.name}
如果TMPL_VAR_IDENTIFY设置为array,那么
{$user.name}和{$user['name']}等效,也就是输出数组变量。
如果TMPL_VAR_IDENTIFY设置为obj,那么
{$user.name}和{$user:name}等效,也就是输出对象的属性。
模版文件命名:
'TMPL_FILE_DEPR'=>'_',
//若在项目配置文件中有配置该项,那么模版命名就是:
控制器名+此处配置的值+方法名。
判断是否ajax请求:
$this->isAjax();//旧版本
IS_AJAX;//新版本
自定义错误页面:
再当前项目的配置文件中:
<?php
return array(
//'配置项'=>'配置值'
'TMPL_EXCEPTION_FILE'=>'./Public/Tpl/error.html',
);
?>
此时再当前项目的控制器中若使用了:
halt("页面不存在");
则会将页面跳转至配置中的error.html,配置中的”./”是相对与浏览器地址栏中的路径的。
在error.html中可以通过<?php echo $e['message'];?>来接收控制器端halt中所传递的错误参数信息。此模版中还可以获得常量,如可以通过<?Php echo __APP__;?>生成首页链接于a标签的href属性中。
所需附件下载:
关键字词:thinkphp3.1.3,雪饮