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, 在数组表现上则为空.

在写表单数据入库操作的时候:

  1. 一定要在对应的模块 的 配置文件中, 写上对应的 "数据库" 连接配置, 主要是DB_NAME=>'...', 因为默认的thinkphp的convention.php中的数据库名称是空的: DB_NMAE=''! 否则, 你是无论如何都得不到$data的! 无论如何都无法写入数据到数据库中去的, 因为 无法连接数据库!
  2. 一定要写上数据库的表前缀, 表示区分数据表
  3. 那么在创建表的 时候 一定要加上表的前缀!! 如你配置的前缀是: DB_PREFIX => 'ly', 那么你创建的表的名称就一定是'ly_user'.
  4. 其他都没有什么. 只是在遍历select结果的时候, 非标签 模板变量中一定要$ : {$vo.username}....
  5. **** 在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文件中的函数.

  1. 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脚本, 后面的代码都不会执行!

  1. _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;
    }
}
  1. 跳转函数: 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个, 不是所有的: 分别是: 单双引号, 大鱼小鱼, 和 "&".

posted @ 2016-04-06 19:58  noitanym  阅读(770)  评论(0编辑  收藏  举报