thinkphp 项目分组 -开发随笔1
php中变量的声明, 和变量的初始化 是结合在一起的, 要声明变量, 就是通过初始化变量来实现的.
感觉页面版式的布局, 还是:
先大致规划出布局, 如两栏 三栏, 一览的左右上下结合, 搭配.
然后,再考虑放值内容. 在设计版式的时候, 不必考虑内容.
ps只是做一些图片大小尺寸等方面的剪切, 一般不自己做图
网站的颜色开始不用过于管, 随意就行, 后来再协商改.
是上标, 是下标.
图片的title和alt属性的区别?
title是标题, 鼠标指向时会出现 "工具栏提示"的就是title.
alt是指当图片因为某些原因不能显示时, 出现在 图片叉叉上的文字.
要在 v3.1.3中实现分组, 只需在配置文件中加上
'APP_GROUP_LIST' => 'Index,Admin',
'DEFAULT_GROUP' => 'Index',
thinkphp 区分前台和后台的公共文件夹Public?
前台的Public文件夹, 就放在根目录下的Public中.
后台的Public文件夹, 为了区分, 就放在Tpl/Admin/Public中,
但是要在后台的配置文件 Conf/Admin/config.php中配置:
return array(
'TMPL_PARSE_STRING' => array(
'__PUBLIC__' => __ROOT__.'/'. APP_NAME.'/Tpl/Admin/Public',
)
);
在3.1.3之前的版本, App(分组的)和ThinkPHP的目录基本上是一样的:
都包括: Common, Conf, Lang, Lib, Runtime 和Tpl.
插入数据库中的数据, 可以用:
insert into user values(....);
或者用:
insert into user set username='admin', passwd=md5('admin'), logintime=unix_timestamp(now())...;
在创建表的时候, 最后的存储引擎和字符集可以用等号也可以不用等号:
create table user(....)engine=myisam default charset=utf8
或者:
cretae table user(...) engine myisam default charset utf8
thinkphp中的地址, 统一的用{:U('Admin/login/verify')}方法来生成...
验证码的引用:
import('ORG/Util/Image');
Image::buildImageVerify(4, 5, 'png') 5: 表示字母和数字的随机组合.
用foreach ..>来循环输出一维数组的时候, item本身就是 数组元素的value了, 所以不能再对item进行取元素操作了,
也不能直接输出文字,
可以用 $key 就表示元素的 "关联"下标 的名称了.
<foreach name="1d_array" item="val">
{$key}: {$val}
</foreach>
foreach 和 volist中 的name 就是变量, 就是 "带$ 的变量" , 如name="key" ,就是 name=$key, name="value",就是name="$val"
<foreach name="data" item="val">
{$key}:{$val}
<eq name="key" value="login"> // 这里的key就是 上面的数组变量 $key, $val, 表示数组的关联 下标和 元素的值.
<eq name="val" value ="1">
状态: 已登录
<else/>
状态: 没登录
</eq>
</eq>
<br>
</foreach>
输出:
id:1
name:admin
passwd:root123
login:1 状态: 已登录
M或D函数的create方法?
M和D方法都是Common文件夹下的common.php文件中的函数:
/**
- D函数用于实例化Model 格式 项目://分组/模块 ,要求有实际的 XXXModel类
- @param string $name Model资源地址
- @param string $layer 业务层名称
- @return Model
*/
function D(\(name='',\)layer='') {
if(empty($name)) return new Model;
static \(_model = array(); ..... .... 返回的是一个\)Model类的对象!!
return $model;
}
/**
- M函数用于实例化一个没有模型文件的Model , 是实例化没有模型文件的Model类对象, 即是最基本的Model类对象. 不需要有另外的xxxModel类.
- @param string $name Model名称 支持指定基础模型 例如 MongoModel:User
- @param string $tablePrefix 表前缀
- @param mixed $connection 数据库连接信息
- @return Model 返回的也是一个Model类对象.
*/
create是Model类的一个方法: 不管是M还是D都可以使用create方法. 只是D方法可以在类中创建$_validate.
/**
* 创建数据对象 但不保存到数据库
* @access public
* @param mixed $data 创建数据
* @param string \(type 状态
* @return mixed
*/
public function create(\)data='',\(type='') {
// 如果没有传值默认取POST数据 , (也就说, M方法和D方法都可以获得表单中的数据来创建 数据对象 , 存入数据表中).
if(empty(\)data)) {
$data = \(_POST;
...............................................
// 数据自动验证
if(!\)this->autoValidation(\(data,\)type)) return false;
// 表单令牌验证
if(!$this->autoCheckToken($data)) {
$this->error = L('_TOKEN_ERROR_');
return false;
}
// 验证完成生成数据对象
if($this->autoCheckFields) { // 开启字段检测 则过滤非法字段数据 (也就是说, 如果不是表中的字段, 表单提交过来会被过滤掉!)
$fields = $this->getDbFields();
foreach ($data as $key=>$val){
if(!in_array($key,$fields)) {
unset($data[$key]);
}elseif(MAGIC_QUOTES_GPC && is_string($val)){
$data[$key] = stripslashes($val);
}
}
}
$this->data = $data;
// 返回创建的数据以供其他调用
return $data;
}
-------------------: 返回值 通常是一个数组, 但是如果错误,(表单中的字段和 数据库表中的字段 不相对应的话! ) 则返回的是false, 在数组表现上则为空.
在写表单数据入库操作的时候:
- 一定要在对应的模块 的 配置文件中, 写上对应的 "数据库" 连接配置, 主要是DB_NAME=>'...', 因为默认的thinkphp的convention.php中的数据库名称是空的: DB_NMAE=''! 否则, 你是无论如何都得不到$data的! 无论如何都无法写入数据到数据库中去的, 因为 无法连接数据库!
- 一定要写上数据库的表前缀, 表示区分数据表
- 那么在创建表的 时候 一定要加上表的前缀!! 如你配置的前缀是: DB_PREFIX => 'ly', 那么你创建的表的名称就一定是'ly_user'.
- 其他都没有什么. 只是在遍历select结果的时候, 非标签
模板变量中一定要$ : {$vo.username}.... - **** 在windows中, mysql的数据表名 不分大小写, 同样在M()和D()方法中,也就不区分 数据表模式名称的大小写!! M('User')=== M('user')但是php中的变量是严格区分大小写的, 即:$user != $User的
thinkphp中的App目录中 的runtime中的cache是一些 由随机数字组成的php文件, 这些文件的内容就是之前曾经访问过的文件的内容,
而且基本上每次修改那些文件的时候 , 主要是index.php/Index/index等等文件, 也会同步修改cache中的文件相应内容.
我们在项目中, 要设置一些系统的/ 项目的配置变量, 如果记不清, 或者不知道, 可以去参考 THINK_PATH."/Conf/convention.php"中的内容
看这个里面的 配置项的写法就可以了
如: 要配置跳转 配置项: 'TMPL_ACTION_SUCCESS' => THINK_PATH.'Tpl/dispatch_jump.tpl', 'TMPL_ACTION_ERROR'=> THINK_PATH.'Tpl/dispatch_jump.tpl' 两个都是跳转到一个相同的模板中的.
注意, 这两个跳转模板页面,实际上, 也是根据 Action->success/ error()方法调用display()来显示的, 其中模板文件中的 模板变量, 如$message, $error, $waitSecond, $jumpUrl等都是通过success和error方法通过assign方法传递过来的模板变量参数. 因此可以在success方法中去修改传递的参数变量.
**** 自己去看Action中的success方法, 里面写得清清楚楚 的!
首先是 sucess(){ 调用了方法: dispatchJump($message, 1, $jumpUrl, $ajax).. }
error() { 调用了 dispatchJump($message, 0, $jumpUrl, $ajax)...}
这两个方法中, $message后的0,1 ,表示的是状态$status.成功为1, 失败为0.
然后, 在dispatchJump(){ 方法中做了以下工作:
里面就写了, $this->assign('message', $message) -> assign('waitSecond', 3)等等,
最后 $this->display( C('TMPL_ACTION_SUCCESS')) 在这里调用了模板文件....
常量 THINK_PATH?
顾名思义, think_path就是thinkphp的路径, 就是项目中, thinkphp这个目录 本身 所在的路径, 一般用THINK_PHP来表示,
那么thinkphp下面的目录, 如Common, Conf (完整包才有的Extend ), Lang, Lib, Tpl等等.
thinkphp的Tpl模板中包含的模板文件有:
default_index.tpl, dispatch_jump.tpl, think_exception.tpl, page_trace.tpl四个模板文件!
几个近似函数的区别?
halt函数, _404, throw_exception 都是Common/functions.php文件中的函数.
- halt 只有一个参数\(error function halt(\)error)
halt的处理逻辑:
首先确定 "异常变量" \(e的内容, 然后不管是app_debug为真还是为假, 都将\)e 分配到 "include C('TMPL_EXCEPTION_FILE');"异常模板页面进行输出.
在调试模式下, 异常变量$e的值有: $e['file'], $e['line'], $e['message'], $e['trace']等信息.
在部署模式下, 就只有 $e['message'] 元素值.
在非调试下, 定向到错误页面: 第一, 首先判断 if(!C['ERROR_PAGE']) 是否为空, 如果不为空,就直接重定向到错误页面: redirect(\(error_page), 如果错误页面没有设置, 就输出错误信息: 第二, 看是否允许输出自定义错误信息: if(C['SHOW_ERROR_PAGE']), 如果要输出自定义错误信息, 就让\)e['message'] = $error显示这个自定义错误参数, 否则就显示系统定义的错误信息: $e['message']=C['ERROR_MESSAGE']
((( convention.php默认的错误页面为空: 'ERROR_PAGE' => '',如果要重定向错误页面, 就要自己去定义))
最后就是包含: include(C('TMPL_EXCEPTION_FILE')) 异常模板页面: think_exception.tpl,
如果if(isset(\(e['file/line/trace']) 等变量, 就输出 这些异常调试信息, 否则, 就只输出上面的\)e['message']等信息输出到异常模板...
最后是exit.
也就说, halt会exit脚本, 后面的代码都不会执行!
- _404($msg, $url)
/**
* 404处理
* 1. 调试模式会抛异常
* 2. 部署模式下面传入url参数可以指定跳转页面,否则发送404信息
* @param string $msg 提示信息
* @param string $url 跳转URL地址
* @return void
*/
function _404($msg='',$url='') {
APP_DEBUG && throw_exception($msg); // 调试模式下抛出异常
........
if($url) {
redirect($url);
}else{
send_http_status(404); // send(404)可能没有任何反应和输出, 只是空白页面!
exit;
}
}
- 跳转函数: redirect, success, error.
thinkphp中的控制器类 名字不叫 Controller, 而是叫 Action: 是一个** 抽象的基类**, abstract class Action...
?: 三元运算符, 是要返回变量的值的, 所以, 只有对/ 凡是对 变量的 if...else样式的 "赋值"操作, 就用这个, 但是如果不是赋值操作, 而是逻辑操作 的if..else就不能使用这个三元操作符!!
strip_tags和htmlspecailchars的区别?
从字面上的含义都可以区分开来: