2010-01-15
标签:thinkphp
  • 本地没有错误的程序,上传到win2003 IIS+PHP的环境下后,发现模板中使用的/index.php无法被自动解析成URL,模板使用原生PHP语法
  • ThinkPHP会自动载入项目目录Common/common.php文件,这里保存的是用户自定义的项目函数
  • 对于使用了分组的项目,空模块类EmptyAction.class.php应该放置在Lib/Action目录下,而不是分组目录下。
  • 跨模块调用其他模块的方法可以使用R("分组名.模块名","项目名")。
  • 或者使用 $Model = A('Model');$Model->action()的方法。
  • 对于输出模板是的display()方法,可以用display("分组名:模块名:操作名")的形式制定使用哪个HTML页面(默认是"分组名/模块名/操作名.html"),但是当修改了模板文件的分隔符后,我们的模板名称是"分组名/模块名-操作名.html",这时display()应写作display("分组名:模块名-操作名")。
  • 若要$Model->first(),last()等方法,$Model须是AdvModel的实例,这点似乎手册上未明确说明。
  • 设置中URL_MODEL=1则是启用PATHINFO模式,在此模式下,不可以在get参数中使用m和a作为变量名,这会和系统的module、action冲突
  • 每次修改数据表结构后,需要清空runtime/data目录下相应的表数据缓存文件
  • 当使用WYSWYG编辑器时,使用URL中包含非目录的"/",有可能被浏览器误作为目录来对待,导致在编辑器中上传的图片,在view和edit时的相对路径很难统一,所以一般开发中最好还是使用URL_MODEL=0或3的模式,避免相对路径的错误
  • model的自动验证中,“require”必填验证,只是判断值是否是/.+/,并没有排除空格的存在,提交几个空格,require的验证也认为是符合的,须注意。(我修改了thinkphp的源码,将这个验证排除了空格)
  • 当使用原生php语法作为模板语法时,想要包含其他模板文件,就需要用php的include函数,但是必须提供完整的文件路径名才能正确包含到想要的文件,实在麻烦,尤其当我启用 分组后,每个包含地址都要把分组名写到include的路径里,假如以后分组名有什么变化,那每个包含模板的位置都需要修改,想想就怕怕。所以我想了办法,在common.php增加了一个函数inc(),它会自动根据项目是否启用了分组,生成模板文件的地址后再进行包含(TEMPLATE_PATH.'/'.GROUP_NAME.'/'.$path;),这样很方便的解决了上面的烦恼,但是又遇到了新问题,被包含的模板文件中的变量,没有获得值。看来使用自定义函数的时候action中assign的变量就没办法自动传入函数中了,再翻看了下thinkphp的api文档,发现view类有个display的方法,我就用这个display方法来代替了inc/include,问题解决了,这个方法和action的display方法一样,只需要提供模板名称,无需提供模板路径及文件后缀,它会自动找到模板文件所在的文字,并且各种模板变量也不会丢失。
  • 方法名不可以是get(),似乎这个方法在父类中另有用处,使用了get的方法,$this->error().$this->success()无法执行。

本博客文章非特别注明均属原创,如需转载请保留本博客地址:http://dao.daimaku.com
您的大名:
电子邮箱:
验证码: