博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ThinkPHP基础-2
阅读量:4577 次
发布时间:2019-06-08

本文共 5757 字,大约阅读时间需要 19 分钟。

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=10  2).pathinfo模式:http://localhost/yzm/index.php/Index/index/id/10  3).rewrite模式:修改apche,修改项目或者底层的配置文件,URL_MODEL  4).兼容模式:http://localhost/yzm/?s=/Index/index/id/10  拓展:在模板里写PHP的函数也不是不可以,直接在{}这么写:{:M('User')},函        数前面加冒号   这个启示我:如果在前台或者后台生成U模板替换,但是还有更  厉害更方便的方法:U();也是很快而且和URL_MODULE联  系更紧密,担任到底是选U  还是__URL__看项目的决策吧7.Action  1).定制报错页面:         系统在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_NAME  3).常用常量:     MOUDLE_NAME     ACTION_NAME     IS_GET     IS_POST     IS_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 "";             跳转一般都是自己写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

你可能感兴趣的文章
python_85_sys模块
查看>>
第九周动手动脑
查看>>
HDU 1811 Rank of Tetris
查看>>
网站UI分析
查看>>
winform 获取当前名称
查看>>
报表分栏后的排序
查看>>
Django中models定义的choices字典使用get_FooName_display()在页面中显示值
查看>>
nohup命令详解(转)
查看>>
别人的Linux私房菜(1)计算机概论
查看>>
系统编程之文件操作
查看>>
ModelState.IsValid
查看>>
React-Native 环境部署
查看>>
0x27 A*
查看>>
bzoj4872: [Shoi2017]分手是祝愿
查看>>
android底部标题栏的实现
查看>>
[Oracle整理]Oracle之ROWTYPE和RECORD
查看>>
英语语法之一致平衡
查看>>
ats 安全
查看>>
NOI导刊2010提高(06) 黑匣子
查看>>
字节对齐[转]
查看>>