挺感谢后盾网的黄老师,讲的很好,受益匪浅。
补充一下,是3.1.3的版本。现在3.2了。
1、__PUBLIC__和__UPLOADS__一样,但是和__ROOT__不同。
__ROOT__ 就是为当前的根目录。是个常量。
前两个不是常量,defined(__PUBLIC__)为假。
2、默认修改__PUBLIC__的路径可以在--模版替换中查找 'TMPL_PARSE_STRING' ,这是一个数组,直接指定__PUBLIC__的路径即可。所有可以分别指定前台后台的public文件夹,在各自的config里。
3、LOAD_EXT_FILE可以加载在common中的以非common.php命名的公用函数,当然也可以采用临时使用方法的方法:load("@.user")。但是只针对当前模块当前方法使用。
4、如果采取多入口,(admin.php 和index.php在同级目录下,)可以在根目录下直接创建一个Conf文件夹,然后里面放config.php,但是这个文件并不会自动加载,需要在前台和后台的配置项目中的config文件夹中用array_merage(include './Conf/config',$config),组合。其中公用配置中放公用配置,$config中放前/后台的私有配置。同样共享公用配置,并拥有自己的配置选项。
5、类似于__ROOT__ APP_NAME APP_PATH
DB_HOST'=>',
'DB_NAME'=>
'DB_USER'=>'',
'DB_PWD'=>'',
'DB_PREFIX'=>'
如果想更改类似的东西,去 D:\AppServ\www\testthink\ThinkPHP\Conf这个文件下去找就可以了。
6、项目配置文件,自动的采用'URL_MODEL'=>1,就是pathinfo方法。
也就是你echo U('Index/index');的结果是:/testthink/index.php/Index/index.html
如果 'URL_MODEL'=>0 结果是:/testthink/index.php?m=Index&a=index
0 的情况适用于空间或者服务器不支持pathinfo的方法。直接更改就可以了。但是很少不支持了。
echo __URL__;输出/testthink/index.php/Index
2的话是apache的rewirte方法,目录为www.baidu.com/index(后面php.html就没有了。)
7、U方法之一:url伪静态,后缀名设置。U方法实际就是帮助生产url地址的。
隐藏掉index.PHP。要把模式设置为2 'URL_MOD'=2,
'URL_HTML_SUFFIX'=>'PHP'一般设置为‘html’或者为空。
如果不想要,可以用U方法的第二个参数
eg:U('Index/index',array('aid'=>1,'uid'=>10)); 会输出:/testthink/index.php/Index/index/aid/1/uid/10
U方法的第三个参数 就是伪静态
eg:U('Index/index',array('aid'=>1,'uid'=>10),'xxxxxx');会输出:/testthink/index.php/Index/index/aid/1/uid/10.xxxxxx
U方法的第四个参数是为是否跳转 (1为跳,0为不跳)
U方法的第五个参数为是否输出域名,1或者true为输出,其他为不输出
一般用U方法的前两个
8、创建自己的公用函数库,在common中,建立一个common.php,可关联第三点。
function p($array){
dump($array,1,'<pre>',0);
}
9、提交地址在tpl模版中要用{:U('Index/handle')};方便管理
10 、I方法,可以接受post或者get表单提交过来的内容.属于3.1.3的内容,但是注意htmlspecailchars($string)没有算在I方法里面。
可以通过I的第三个参数来完善 echo I('content','','htmlspecialchars');放一个函数来处理,应该3.12已经修复了。后话。
一般接受表单提交过来的内容可以用I方法,但是create()不是更好?
$user=M('user')->where(array('username'=>$username))->find();
$user=I('username');$pwd=I('password','',md5'');
if(!$user || $user['password']!=$pwd){
$this->error('帐号或者密码不正确');
}
if($user['lock']){$this->error('用户被锁定');}
11、常量 IS_POST();判断是否是表单提交
eg:if(!IS_POST){_404('你想干嘛?',U('index')};
_404第二个页面是跳转地址
if(!IS_POST) _404('你想翻墙maa',U('Index/index'));为什么不跳转?因为你开启了调试模式
或者是halt('页面去火星了');
注意错误信息提示要跟是否开启DEBUG信息有关系。
12、define('APP_DEBUG',TRUE);这个是在入口文件里定义的。
13、data方法,也可以直接用creat方法。M('User')=new Model('User');
14、$this->success('陈功','U('Index/index')');
$this->error('失败',)//默认会返回提交的页面,相当于后退按钮。
15、$this->where(array('id'=>array('gt',0)))->delete();
delete()必须要where方法才会成功,注意where内的数组用法。
16、 date('Y-m-d H:i:s');
{$v.time|date='y-m-d H:i:s',###}
###代表把当前的参数$v.time放在date的第二个参数上。日期函数
17、分配过来的变量,当在前台循环的时候。$v.id会自动判断传过来的是对象还是数组。
一般最多的就是数组。可以设置提高效率。就要点只解析数组。用到参数
'TMPL_VAR_IDENTIFY'=>'array',
18、'DEFAULT_FILTER'=>'htmlspecialchars',
====================项目分组===
19、去外层的config里面定义项里开启分组和设置默认分组目目录和默认的项目入口目录
<?php
return array(
'APP_GROUP_LIST'=>'Index,Admin',
'DEFAULT_GROUP'=>'Index',
);
?>
20、time int(10)
21、减少文件夹目录访问深层路径的办法,控制器名_模版名,在config.php中高配置
'TMPL_FILE_DEPER'=>'_',
22、js中拿到其他模块链接的两种方法。注意如果分组模式需要手动添加多出来的Index分组模块下的Index控制器,然后再加上方法名字。
<script type='text/javascript'>
var handurl='__APP__/Index/handle';
var handurl='{:U("handle")}';
</script>
注意理解:http://localhost/wishfenzu/index.php/Index/Index/handle。分组模式下的目录结构。
23、判断是否为Ajax提交的方法 var_dump(IS_AJAX);
$.post(handurl,{username:username.val(),content:content.val()},function(data){
},'json'
),
通过远程 HTTP POST 请求载入信息。(具体可查看Jquery手册)
这是一个简单的 POST 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax。
参数
url,[data],[callback],[type]String,Map,Function,StringV1.0url:发送请求地址。
data:待发送 Key/value 参数。
callback:发送成功时回调函数。
type:返回内容格式,xml, html, script, json, text, _default。
24、 指定错误页面模版路径,可以由halt('页面不存在,'),和_404页面是一样的结局。
'TMPL_EXCEPTION_FILE'=>'./Public/Tpl/error.html',
);
可以在指定的目录中用<?php echo $e['message'];来接受,注意,错误页面不接受模版解析。
意思是直接在error.html中写{$e.message},这样是不行的。
25、5秒后设置跳转的方法
<script type='text/javascript'>
window.οnlοad=function(){
setTimeout(function(){
window.location.href="<?php echo __APP__;>";
},5000);
}
</script>
26、默认过滤函数 'DEFAULT_FILTER'=>'',THINK中默认就是htmlspecailchars;
其他方式可以为intval强转
27、将数组写入到文件当中,可联想网站的基本信息配置也可以采取这种方法。
传统方法:$phiz=array(
'zhuangkuang'=>'抓狂',
'baobao'=>'抱抱',
'haixiu'=>'害羞',
'ku'=>'哭',
'xixi'=>'嘻嘻',
'taikaixin'=>'太开心',
'touxiao'=>'偷笑',
'qian'=>'钱',
'huaxin'=>'花心',
'jiyan'=>'挤眼',
);
$str="<?php return \t".var_export($phiz,true).';?>';
file_put_contents('./data/phiz.php',$str);
think中的方法:写入:F('name',$arr,'path');
读出:F('name','','path');
28、Ajax返回状态提示成功的问题。
如果失败返回echo json_encode(array('status'=>0));
THINK中Ajax josn返回的方法为:$this->ajaxReturn(array('status'=>0),'json');
26、think中的验证码的混合模式,是严格区分大小写的,需要js统一调制,或者直接输出数字的验证码。
其中大小宽度,样式格式,session中存取验证码的名称等等是在build验证码的时候。
如下:
buildImageVerify($length,$mode,$type,$width,$height,$verifyName)
用法 length 验证码的长度,默认为4位数
model 验证字符串的类型,默认为数字,其他支持类型有0 字母 1 数字 2 大写字母 3 小写字母 4中文 5混合
type 验证码的图片类型,默认为png
width 验证码的宽度,默认会自动根据验证码长度自动计算
height 验证码的高度,默认为22
verifyName 验证码的SESSION记录名称,默认为verify
27、注意用了select()就别用find()了,这两个的区别要注意。
另外:find方法最多只会返回一条记录,因此limit方法对于find查询操作是无效的
28、页面开启trace 'SHOW_PAGE_TRACE' =>true,
29、自动运行检测的方法。即是初始化的方法
public function _initialize(){
echo"每个控制器都会执行的方法";
}使用这个方法一般新建一个commonAction 控制器,
Class CommonAction extends Action{
Public function _initalize(){
if(!isset ($_SESSION['uid']) || !isset($_SESSION['username'])){
$this->redirect(Admin/Index/LOING)
}
}
}
30、think中css js的引入
传统方式:
<link rel='stylesheet' href='__PUBLIC__/Css/public.css'/>
think中引入css的方法 <css file =''/>
think中引入js的方法 <js file=''/>
31、后台添加删除 更改等链接的时候 ,用到U方法传递id的值的要注意格式<td><a href="<{:U('Admin/Cate/dele',array('id'=>$v[id]))}>">[删除]</a>
如果删除的时候,id已经传过来了,并且id为主键,那么直接可以用M('User')->delete('$id');
32、display("index:index ");
$this->display();当然Action下的目录模板
$this->display('index') 当然Aciton下的index目录模板
$this->display('index:index');index Action的目录下的index模板
33、类库导入
自定义类:在lib下的org目录下。创建 stu.class.php
Lib/Model/InfoModel.class.php类文件。通常我们都是在当前项目里面导入所需的类库文件,所以,我们可以使用下面的方式来简化代码
import("@.Action.UserAction");
import("@.Model.InfoModel");
kzj101 -10个
kpj105- 10箱b
34、当访问空模块,空方法的时候。包括空操作(方法)和空模块(action)。会自动调用。默认是非法操作等。。
相当于魔术方法,写在类里,当调用一个不存在的方法时,会自动触发。
public function _empty($name){die('调用"{$name}" .'不存在'');}
35、前置和后置方法,比如像注册之后推荐信息。_before _after
36、A方法 :跨模块调用,跨组调用。
37、重定向。用户注册之后跳转到之前的支付页面,或者是浏览的id为5的产品的页面。
38、自动验证,自动完成,自动检测。