1. Controller 和 模板之间的关系

1.1 Controller 名字大家习惯了规范的驼峰命名法,

例如:HelloWorldController.php 命名
类中的 Action 也喜欢驼峰命名法. 
例如:public function WelcomeHome(){
//你的模板也是 WelcomeHome.html
$this->display();
//此种情况在win环境下没有问题,在Linux下如果开启debug模式也是没有问题
//唯独关闭了DEUBG模式,问题来了,提示找不到模板

####解决方案:
1. $this->display('WelcomeHome');
2. 模板文件一律小写
}

2. Widget夸模块调用的时候模板路径查找问题.

2.1 场景,有Deans模块 和 Students模块,我们在Home模块设置了一个Widget

--Deans
--Students
--Home
  --Widget
  ----HomeWidget.class.php
  文件内容:
  namespace Home\Widget;
  use Think\Controller;
  class HomeWidget extends Controller{

    /**
     * @param string $showSearch  显示搜索框
     * @param string $showtext    默认搜索框展示内容
     * @param $searchText         回显搜索内容
     * @return boold
     */
    public function searchBar($showSearch='',$showtext='',$searchText){
    if(!$showSearch) return false;
    if(!$showtext) $showtext='请输入查询姓名 或者 手机号';
    $this->assign('showText',$showtext);
    $this->assign('searchText',$searchText);
    $this->display(T('Home@Widget/searchBar'));
    }
    ###问题来了,我们在Home模块下View模板目录下面有一个Widget挂件目录,
    目录下面有我们要使用的模板.searchBar.html
    
    这时候为了防止跨模块出现问题,挂件的模板目录,必须用T方法
    T('Home@Widget/searchBar'), 这样可以解决跨模块使用挂件问题
  }

3.模型数据库定义和数据库表之间关系.

场景: 数据库表1 tp_cnf_shools  和 数据库表2 tp_students 数据库表3 tp_cnfshools

TP 中在使用模型定义的时候建议如下使用:
在使用TP的D方法的时候,TP会自动根据Model前的名字,去找数据库,根据数据库大小写在找数据库表的时候,进而增加下划线分割
class CnfShoolsModel extens Model{
     ###找的表为 cnf_shools 因为Shool的首字母为大写
     虽然TP提供了指定数据表名的方法,但是又一次我再测试的时候,竟然发现无效,这块大家再确认下。
     protected $tableName = 'students_class'; 
}
Class Students extents Model{
     ###直接找 students 数据库表
}
想找数据库表3.建议Model名为  class Cnfshools extents Model.

如果大家纯粹设置一个空模型或者一个跟数据表无关的模型,可以在类里面设置
protected $autoCheckFields = false; 不检查数据表字段属性

4. 一些标签的使用心得

4.1 volist
    场景:
    $data = array(
        3 => 'aaa',
        4 => 'bbb',
    );
    ##这块要说的是 如果你想打印数组的键,使用$k,是很错误的选中,那个只是索引从1开始的
    应该使用:{$Think.lang.$key} 
    <volist name="list" id="vo" key="k">
    <p>{$vo}--{$Think.lang.$key}--{$k}</p>
    </volist>
   
4.2 eq 是个很不错的选中,判断是否相等 同理 neq, name="mod" 解析为 $mod
    <eq name="mod" value="1">{$vo.name}</eq>

4.3 

5. 模板的映射路径以及模板布局

5.1 场景:

   --Students
    --View
      --Index
        --index.html
        --index_main.html
      --Test
        ---test.html
      --Public
        --header.html
        --footer.html
   --Deans
    --View
      --Index
        --deanindex.html
      --Test

    5.1.1 在Studetns模块下的IndexController 下的 IndexAction中

    function Index(){
    $this->display()  //此刻找的模板路径为Index/index.html
    $this->display('index_main')  //此刻找的模板路径为Index/index_main.html
    $this->display("Test:test");  //此刻意图为在当前项目的模板目录找Test目录下的test.html
    //此处借用T方法,用户生成模板文件名,跨模块调用
    $this->display(T("Deans@Index/deanindex"));  //意图调用Deans模块下的控制器的deanindex.html
    }

    5.2 模板layout布局
     通过在项目配置文件中配置布局文件
     'LAYOUT_NAME' => '../../Home/View/Common/layout',//layout路径
     在多项目的时候建议,在自己的模块中单独配置,不要放在所有项目的公共配置文件中.
     配置中的路径,是根据Controller的位置来定位layout的文件位置的.
     
     在layout.html中代码,以后所有的Controller的display页面中直接写,包含模块的部分
     <include file="Home@Common/common_header" />
     <!-- 相关匹配页面 -->
            {__CONTENT__}  
      <!-- 相关匹配页面 -->
     <include file="Home@Common/common_footer" />

     在Controller 中,有时候会使用iframe包含,弹层、ajax等处理的时候不想使用布局
     直接: layout(false); 关闭布局

     包含: 意图包含Deans模块下模板目录下Index目录下的deanindex.html 文件
     <include file="Deans@Index/deanindex" />
     包含: 意图包含当前模块下模板目录下Index目录下的index_main.html 文件
     <include file="Index/index_main" />