zoukankan      html  css  js  c++  java
  • 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个, 不是所有的: 分别是: 单双引号, 大鱼小鱼, 和 "&".

  • 相关阅读:
    GPS授时服务器(卫星同步时钟)科普小知识
    GPS和北斗卫星授时技术在时频领域的应用和发展
    NTP时间同步服务器(NTP时间服务器)在北京邮电大学的应用案例
    北斗时钟源(GPS网络时钟源)在校园网络应用
    NTP时钟源(GPS时间源)介绍与分析 安徽京准电子科技
    搭建ntp时间服务器并配置集群自动时钟同步
    GPS北斗网络时间源在内网域控制器上的设置方法
    肺炎疫情过后最想干的几件事
    提升苏州城市地位的几个建议
    江苏省如要打造一线城市,很简单!
  • 原文地址:https://www.cnblogs.com/bkylee/p/5360899.html
Copyright © 2011-2022 走看看