由网络副手--寻路人于2017.03.20 12:01:00发布在Thinkphp Thinkphp 开发中需要注意的那些事 阅读2676 评论0 喜欢0 **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} {$vo}--{$Think.lang.$key}--{$k} 4.2 eq 是个很不错的选中,判断是否相等 同理 neq, name="mod" 解析为 $mod {$vo.name} 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页面中直接写,包含模块的部分 {__CONTENT__} 在Controller 中,有时候会使用iframe包含,弹层、ajax等处理的时候不想使用布局 直接: layout(false); 关闭布局 包含: 意图包含Deans模块下模板目录下Index目录下的deanindex.html 文件 包含: 意图包含当前模块下模板目录下Index目录下的index_main.html 文件 赞 0 分享 赏 您可以选择一种方式赞助本站 支付宝扫码赞助 BraveDu 署名: 网络副手~寻路人