thinkphp 项目分组 -开发随笔1
2016-04-06 19:58
609 查看
php中变量的声明, 和变量的初始化 是结合在一起的, 要声明变量, 就是通过初始化变量来实现的.
感觉页面版式的布局, 还是:
先大致规划出布局, 如两栏 三栏, 一览的左右上下结合, 搭配.
然后,再考虑放值内容. 在设计版式的时候, 不必考虑内容.
ps只是做一些图片大小尺寸等方面的剪切, 一般不自己做图
网站的颜色开始不用过于管, 随意就行, 后来再协商改.
是上标, 是下标.
图片的title和alt属性的区别?
title是标题, 鼠标指向时会出现 "工具栏提示"的就是title.
alt是指当图片因为某些原因不能显示时, 出现在 图片叉叉上的文字.
要在 v3.1.3中实现分组, 只需在配置文件中加上
thinkphp 区分前台和后台的公共文件夹Public?
前台的Public文件夹, 就放在根目录下的Public中.
后台的Public文件夹, 为了区分, 就放在Tpl/Admin/Public中,
但是要在后台的配置文件 Conf/Admin/config.php中配置:
在3.1.3之前的版本, App(分组的)和ThinkPHP的目录基本上是一样的:
都包括: Common, Conf, Lang, Lib, Runtime 和Tpl.
插入数据库中的数据, 可以用:
thinkphp中的地址, 统一的用{:U('Admin/login/verify')}方法来生成...
验证码的引用:
用foreach ..>来循环输出一维数组的时候, item本身就是 数组元素的value了, 所以不能再对item进行取元素操作了,
也不能直接输出文字,
可以用 $key 就表示元素的 "关联"下标 的名称了.
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;
-------------------: 返回值 通常是一个数组, 但是如果错误,(表单中的字段和 数据库表中的字段 不相对应的话! ) 则返回的是false, 在数组表现上则为空.
一定要写上数据库的表前缀, 表示区分数据表
那么在创建表的 时候 一定要加上表的前缀!! 如你配置的前缀是: 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中的文件相应内容.
如: 要配置跳转 配置项: '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方法中去修改传递的参数变量.
那么thinkphp下面的目录, 如Common, Conf (完整包才有的Extend ), Lang, Lib, Tpl等等.
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处理
调试模式会抛异常
部署模式下面传入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.
感觉页面版式的布局, 还是:
先大致规划出布局, 如两栏 三栏, 一览的左右上下结合, 搭配.
然后,再考虑放值内容. 在设计版式的时候, 不必考虑内容.
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处理
调试模式会抛异常
部署模式下面传入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的区别?
从字面上的含义都可以区分开来:strip_tags将剥离所有的php和html标签, 任意的, 所有的标签为html实体, 其js或html标签的含义将消失;
htmlspecailchars: 指的是特殊字符, 就那么几个,5个, 不是所有的: 分别是: 单双引号, 大鱼小鱼, 和 "&".
相关文章推荐
- 说说php引用的那些事
- 我 && yii2 (二)
- php安装mamcache扩展时报错
- PHP数组常用函数分类整理
- PHP数组合并 array_merge 与 + 的差异
- php写守护进程(Daemon)
- 记一次错误调试,关于php命令行[php cli]
- Chrome浏览器地址栏访问接口url,重复请求问题解决
- Chrome浏览器地址栏访问接口url,重复请求问题解决
- PHP JSON_ENCODE 不转义中文汉字的方法
- thinkcmf thinkphp隐藏后台地址
- ubunt tftp服务器搭建
- php 使用GD库压缩图片,添加文字图片水印
- 提高PHP开发质量的36个方法(精品)
- Fatal error: Call to undefined function mcrypt_encrypt()
- PHP替换特殊字符
- PHP使用HighChart生成股票K线图详解
- yii 应用组件
- vsftpd配置文件详解
- Laravel 粗略笔记