1.配置文件为了效率:应该在底层修改:一改则所有APP都能用如果单独某个APP需要特定的配置,再在单独的conf.php中单独定义,或者C方法在特定位置单独修改配置:TP底层{管理配置}+APP配置{我们自己每一个APP的自定义配置}{大家公用的配置放在惯例配置里面}{单独每个APP的特定配置写在自己的conf.php里面}*APP单独设置举例:admin和home可能连接的数据库不一样admin和home默认的入口文件后的默认进入模板和操作不一样,在每个APP的conf里面单独配置它所以在项目开发时,一定不要盲目写代码,一定好好思考,我有几个模块,这几个模块公用的功能是什么,共有的配置是什么,可以用一个文件共享他们的公用模块吗?然后在设计好共有部分和私有部分,再开始写代码、举个例子:在开发多个项目的时候,我感觉大部分的项目的数据库都是一样的链接,那么至少数据库的链接可以在惯例配置{底层ThinkPHP}里面写,那么就大大提高代码共享了2.3.模板替换这几个很重要:__ROOT__:网站根目录__APP__:当前应用网站绝对路径__URL__:当前模块的网站绝对路径__ACTION__:当前操作的网站绝对路径__SELT__:当前的URL__PUBLIC__:根目录下的Public目录的网站绝对路径../Public:当前APP下的Public目录的网站绝对路径{这绝对不是常量}__TMPL__:* 这几个替换,在html和PHP中均可以解析替换的规则相同吗?* PHP中:__ROOT__:网站根目录__APP__:当前应用网站绝对路径__URL__:当前模块的网站绝对路径__ACTION__:当前操作的网站绝对路径__SELT__:当前的URL* 模板中:__ROOT__:网站根目录__APP__:当前应用网站绝对路径__URL__:当前模块的网站绝对路径__ACTION__:当前操作的网站绝对路径__SELT__:当前的URL__PUBLIC__:根目录下的Public目录的网站绝对路径../Public:当前APP下的Public目录的网站绝对路径{这绝对不是常量}__TMPL__:* 但是:它们都是系统定义的常量吗?__ROOT__:网站根目录__APP__:当前应用网站绝对路径__URL__:当前模块的网站绝对路径__ACTION__:当前操作的网站绝对路径__SELT__:当前的URL这4个是系统的路径常量{自己在方法里面测试一下就知道了}其他的就不是,那么其他的是什么原理支持替换,以后研究底层再说* 静态资源一定要用网站的绝对路径。* 代码示例:在index.html里面输出一个图片4.Home/Common/haoge.php:当前APP所有模块的操作都可以直接使用它的函数包含扩展类:import5.所有页面的权限把控:{用于后台登陆}代码示例:见test文件夹需求:求一个方法,除了在Login模块的所有方法之前不执行,但是在其他任何模块的所有操作之前都要执行。解决方案:class LoginAction  extends Action {//这个Login模块单独开来,它显示的就是登陆的方法细节,它没有继承CommonAction}class CommonAction extends Action{ public function _initialized(){//权限把控的细节函数啦} } //权限把控的实现过程,这个类就是其他所有模块的父类了,以后其他模块{除Login外}就不用继承Action这个TP底层的基类了//这个_initialized()就是用来解决如何实现每个模块在第一步就执行验证方法的关键,TP的类继承的有一个规则,所有继承了父类的子类,做任何操作之前都要先执行父类的_initialized()这个初始化函数class IndexAction extends CommonAction{};class UserAction  extends CommonAction{};//看清楚现在所有其他模块都是继承CommonAction,而不是以前的Action//但不要担心,因为CommonAction已经继承了Action ,所有但凡继承了CommonAction的模块依然 能使用Action的方法6.URL模式:{URL_MODEL参数定义}1).普通模式:http://localhost/yzm/index.php?m=Index&a=index&id=102).pathinfo模式:http://localhost/yzm/index.php/Index/index/id/103).rewrite模式:修改apche,修改项目或者底层的配置文件,URL_MODEL4).兼容模式:http://localhost/yzm/?s=/Index/index/id/10拓展:在模板里写PHP的函数也不是不可以,直接在{}这么写:{:M('User')},函        数前面加冒号这个启示我:如果在前台或者后台生成U模板替换,但是还有更  厉害更方便的方法:U();也是很快而且和URL_MODULE联  系更紧密,担任到底是选U  还是__URL__看项目的决策吧7.Action1).定制报错页面:系统在debug模式下默认是底层的TPL目录下的Think_Exception.tpl  //我们如果去掉debug模式,这个页面就不会指向了,debug模式下我可以在APP的conf里面定义异常页面:'TMPL_EXCEPTION_FILE'=> './Public/error.tpl'  //error.html则个页面我自己创建一个就OK,这个路径也是看情况自己决定放哪里合适异常模板中可以使用的变量:{用PHP代码去实现,因为异常模板里面不支持模板引擎}$e['file']$e['line']$e['message']$e['trace']2).在操作中获取当前模块和操作:1.$_GET[_URL_][0]  $_GET[_URL_][1];__URL__          __ACTION__2.MODULE_NAME ACTION_NAME3).常用常量:MOUDLE_NAMEACTION_NAMEIS_GETIS_POSTIS_AJAX{在部署模式下,关闭debug那么异常页面不会出现,但是页面如果出错,它就显示找不到页面,所以应该要优化一下}4).空模块,空操作://不存在的模块和操作,对于用户访问不存在的页面,需要给他优化一下报错页面function _empty(){ $this->myerror(); }function myerror(){$this->display('myerror'); }//注意这里的display必须写死去哪个页面,否则默认很奇葩不是去myerror空模块:在lib/下面写模块。class EmptyAction extends Action {。。。};  //在里面也可以结合一下定制空操作{写_empty()方法}5).URL伪静态:{功能类似rewrite}设置页面URL的静态后缀,去底层的配置文件'URL_HTML_SUFFIX'=>'html';  //最好让他只支持html,否则一大堆后缀不和谐啊URL重写:就是和rewrite一模一样的配置和功能URL生成:研究U();//动态生成URL,以配合项目移植和某些操作U("show");U("User/show");U("User/show?id=10");U("User/show", "id=10");U("User/show", array('id'=>'10'));重定向:$this->redirect('User/index', array('id'=>'10'), '5', '即将跳转');//如果一定要调到百度:在function 里面用js:  echo "<script>location='http://www.baidu.com'</script>";跳转一般都是自己写js的函数解决页面跳转://由于底层实现success和error的原理就是替换当前地址栏的某些部分,如果没写全地址栏那就悲剧了,所以这么用success和error:$this->success('yes', U('show'), 5);$this->error('no', U('show'), 5);如果想修改success和error的展示页面,见手册,这个太好改了URL路由:利用路由规则,虚假地址转去真实地址URL大小写://由于TP默认自动加载所有的Action,所以无需导入对应的Action就可以直接调用类了跨模块操作A():比如我当前在Home项目下的Index模块,$user = A('User');//使用当前项目中的User模块$user->select();比如我现在在Home项目下,$user = A('Admin://User'),直接调用Admin项目下的User模块R()调用方法:R('User/info');//User在当前项目内,R('Admin://User/info');//User在Admin项目内。获取系统变量:比普通post和get数组获取的方式多了个过滤,{记住!!!:过滤只能对单个数组元素,不要直接传整个数组名}第7讲还有时间再看它什么意思???{转实体:避免sql注入}获取系统变量进入数据库:还不如直接用htmlspecialchars($_GET['name']),不建议使用$this->_get('name');而从数据库出来$str,这么操作一下:$str = htmlspecialchars_decode($str)就OK了,还是用PHP的原生方案第8讲的Ajax完全不懂,明天或者周六再好好看懂Action参数绑定:给URL传方法里面需要的参数,而对应的在方法里面写拿这些参数做什么?这就是所谓的绑定8.Model  见文件model_test9.View10.模板引擎11.调试12.缓存13.要十分小心注意return和exit的区别:return 是终止一个函数的运行,跳出return所处的函数外面;所以如果“return写在一个函数A”,而A被调用到其他函数B里面,尽管A可能是我们做某个验证,如果A条件适宜就输出B的其他剩余部分代码,如果不满足,就跳出去。这时候return可就不管用了,他只是跳出A,你B中调用了A,它跳出B的那一刻,已经执行了B的余下代码,所以显然就不合适了。这时候,exit最好,exit是中断整个脚本的余下输出但有时候我们只是想跳出单个函数而不能让整个脚本文件中断,就必须用return 

转载于:https://www.cnblogs.com/LS1314/p/8604628.html

ThinkPHP基础-2相关推荐

  1. ThinkPHP基础概念

    OOP 面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构.OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组 ...

  2. ThinkPHP 基础

    主要内容:搭建tp框架中主要文件 主要了解的是TP框架中的主要的几个文件及文件夹 提示:现在我用的是ThinkPHP框架是3.2.3版本 首先:使用框架 在www目录下 先看Conf文件夹(配置文件夹 ...

  3. thinking php 教程,Thinkphp基础教程

    写了点tp5的基础教程 创建类,命名空间,use namespace app\index\controller; //命名空间 //这些use都是后面的方法用的,可以暂时屏蔽 use think\Db ...

  4. 【thinkphp 基础 1】thinkphp 如何搭建?如何配置环境运行?

    php在现有的市场占有率还是很高的,很多中小型企业都是使用php进行后台以及api管理开发,包括不少大厂的部分业务也都是由php进行编写维护的. 随着php的发展,也出现了很多的cms(织梦.帝国.p ...

  5. laravel基础课程---8、laravel响应和视图(响应是什么)

    laravel基础课程---8.laravel响应和视图(响应是什么) 一.总结 一句话总结: 就是向请求返回的响应数据(一般为html(视图),当然也可以是变量值):所有的路由及控制器必须返回某个类 ...

  6. ThinkPHP入门--后盾视频

    1.使用ThinkPHP基础知识: PHP OOP面向对象编程思想 MVC设计模式 2.安装环境 LAMP:Linux + Apache + MySQL + PHP WAMP:Windows + Ap ...

  7. 对比ThinkPHP和Drupal看中外软件业现状

    住房.结婚.医疗.教育.养老每一个都是一座大山,"搞钱"必须是头等重要的大事,谁有空搞开源?于是仅两个核心开发者打造的ThinkPHP成为了很多人的希望,而另外一边,没有" ...

  8. thinkphp 5.0.23 rce漏洞复现

    thinkphp 5.0.23 rce漏洞复现 thinkphp介绍 thinkphp是一个快速.兼容而且简单的轻量级国产php开发框架,支持windows/Unix/linux等服务器环境,并且有相 ...

  9. thinkphp,onethink,ocenter

    现在大概懂了些: PDO thinkphp是开发php网站的框架,就是说框架部分已经都有了,可以在此基础上按照自己需求更新index.php等各种view,control信息,最终建立完成自己网站. ...

最新文章

  1. unity3d EasyTouch滑动屏幕移动相机观看场景
  2. 【数据结构与算法】之深入解析“柱状图中最大的矩形”的求解思路与算法示例
  3. sturts2标签判断多个条件
  4. hibernate 序列_Hibernate身份,序列和表(序列)生成器
  5. pycharm 安装 tensorflow
  6. linux修改services命令,Linux中service指令都有哪些参数
  7. 吴恩达深度学习 —— 4.5 搭建深层神经网络块
  8. cmd无法运行python_通过Java-%1在cmd中运行python文件不是有效的Win32应用程序 - java...
  9. netstat查看占用端口
  10. [JavaWeb基础] 012.Struts2 自定义标签使用
  11. LINQ to XML 操作XML文档
  12. linux多线程select定时器,linux使用select实现精肯定时器详解
  13. 从运维和SRE角度看监控分析平台建设
  14. fluent前处理——gambit边界设置
  15. 三菱FX系列PLC-编程2
  16. 网络配置实训(思科)
  17. 风尚云网学习-css实现文字超出隐藏为省略号...
  18. 吃饭。睡觉。打豆豆。
  19. 华东、华北、华南的城市
  20. 文字折叠特效 html+css

热门文章

  1. TCP/IP协议 三次握手
  2. AdaBoost人脸检测算法1(转…
  3. ESP8266 Deep-Sleep 模式下的唤醒方式
  4. Kotlin新手入坑:协程基本使用以及API...|..ST
  5. 废旧平板电脑改装HDMI、VGA显示器
  6. SpringBoot整合Druid数据源页面访问报该页面无法正常运作
  7. 鸿蒙视频激活码,开天辟地破鸿蒙,往年重大版本更新回顾
  8. 深度学习中:使用GPU和CPU的区别
  9. homeassistant 接入小米温湿度计2
  10. 洛阳地铁一号线无人驾驶_洛阳超级拖拉机I号实现无人驾驶功能