您的位置:首页 > 编程语言 > PHP开发

thinkphp 项目分组 -开发随笔1

2016-04-06 19:58 609 查看
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处理

调试模式会抛异常

部署模式下面传入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个, 不是所有的: 分别是: 单双引号, 大鱼小鱼, 和 "&".

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: