欢迎光临seo外链资源网站,我们为你英文友情链接的信息及服务

seo外链资源

一个资源好的推广优化外链发布网站,为你解决外链获客难题

thinkPHP学习笔记之基础概念(一)

作者:jcmp      发布时间:2021-04-23      浏览量:0
一、thinkPHP3.2目录结构工程目

一、thinkPHP3.2目录结构

工程目录 www WEB部署目录(或者子目录) ├─index.php 入口文件 ├─README.md README文件 ├─Application 应用目录 ├─Public 资源文件目录 └─ThinkPHP 框架目录 TP框架结构 ├─ThinkPHP 框架系统目录(可以部署在非web目录下面) │ ├─Common 核心公共函数目录 │ ├─Conf 核心配置目录 │ ├─Lang 核心语言包目录 │ ├─Library 框架类库目录 │ │ ├─Think 核心Think类库包目录 │ │ ├─Behavior 行为类库目录 │ │ ├─Org Org类库包目录 │ │ ├─Vendor 第三方类库目录 │ │ ├─ ... 更多类库目录 │ ├─Mode 框架应用模式目录 │ ├─Tpl 系统模板目录 │ ├─LICENSE.txt 框架授权协议文件 │ ├─logo.png 框架LOGO文件 │ ├─README.txt 框架README文件 │ └─ThinkPHP.php 框架入口文件。

Application ├─Common 应用公共模块 │ ├─Common 应用公共函数目录 │ └─Conf 应用公共配置文件目录 ├─Home 默认生成的Home模块 │ ├─Conf 模块配置文件目录 │ ├─Common 模块函数公共目录 │ ├─Controller 模块控制器目录 │ ├─Model 模块模型目录 │ └─View 模块视图文件目录 ├─Runtime 运行时目录 │ ├─Cache 模版缓存目录 │ ├─Data 数据目录 │ ├─Logs 日志目录 │ └─Temp 缓存目录。

二、TP命名规范

TP命名采用驼峰法命名,对于类名首字母要大写,对于M类和C类要有Model后缀和Controller后缀。

三、解释下其中的几个概念:

名称 描述 应用 基于同一个入口文件访问的项目我们称之为一个应用。 模块 一个应用下面可以包含多个模块,每个模块在应用目录下面都是一个独立的子目录,包含配置文件,MVC文件等,3.2以后默认生成一个Home模块。 控制器 每个模块可以包含多个控制器,一个控制器通常体现为一个控制器类。 操作 每个控制器类可以包含多个操作方法,也可能是绑定的某个操作类,每个操作是URL访问的最小单元。

四、URL模式

官方链接: http://document.thinkphp.cn/manual_3_2.html#url。

如果我们直接访问入口文件的话,由于URL中没有模块名、控制器名称(不包括Controller后缀)和操作名称(函数名称),因此系统会访问默认模块(Home)下面的默认控制器(Index)的默认操作(index),因此下面的访问是等效的: http://serverName/index.php http://serverName/index.php/Home/Index/index http://serverName/index.php/ ?m=Home/Index&a=index。

上面这种URL模式就是系统默认的PATHINFO模式,也是最常用的模式,不同的URL模式获取模块和操作的方法不同,ThinkPHP支持的URL模式有四种:普通模式、PATHINFO、REWRITE和兼容模式,可以设置URL_MODEL参数改变URL模式。

URL模式 URL_MODEL设置 普通模式 0 PATHINFO模式 1 REWRITE模式 2 兼容模式 3。

五、函数参数的绑定

参数绑定功能默认是开启的,其原理是把URL中的参数(不包括模块、控制器和操作名)和操作方法中的参数进行绑定。 要启用参数绑定功能,首先确保你开启了URL_PARAMS_BIND设置: 'URL_PARAMS_BIND' => true, // URL变量绑定到操作方法作为参数。

参数绑定有两种方式:按照变量名绑定(默认)和按照变量顺序绑定。

注意:对于带有参数的函数,如果URL没有传入对应的参数值,则会报错,为避免报错我们可以给函数设置一个默认值 如: public function read($id=0){ echo 'id='.$id; }

六、伪静态

URL伪静态通常是为了满足更好的SEO效果,ThinkPHP支持伪静态URL设置,可以通过设置URL_HTML_SUFFIX参数随意在URL的最后增加你想要的静态后缀,而不会影响当前操作的正常执行。例如,我们设置。

'URL_HTML_SUFFIX'=>'shtml'

的话,我们可以把下面的URL http://serverName/Home/Blog/read/id/1 变成 http://serverName/Home/Blog/read/id/1.shtml 后者更具有静态页面的URL特征,但是具有和前面的URL相同的执行效果,并且不会影响原来参数的使用。 默认情况下,伪静态的设置为html,如果我们设置伪静态后缀为空,

'URL_HTML_SUFFIX'=>''

则可以支持所有的静态后缀,并且会记录当前的伪静态后缀到常量 EXT ,但不会影响正常的页面访问。 例如: http://serverName/Home/blog/3.html http://serverName/Home/blog/3.shtml http://serverName/Home/blog/3.xml http://serverName/Home/blog/3.pdf。

都可以正常访问,如果要获取当前的伪静态后缀,通过常量 EXT 获取即可。 如果希望支持多个伪静态后缀,可以直接设置如下:

// 多个伪静态后缀设置 用|分割 'URL_HTML_SUFFIX' => 'html|shtml|xml'

那么,当访问 http://serverName/Home/blog/3.pdf 的时候会报系统错误。 可以设置禁止访问的URL后缀,例如: 'URL_DENY_SUFFIX' => 'pdf|ico|png|gif|jpg', // URL禁止访问的后缀设置。

如果访问 http://serverName/Home/blog/3.pdf 就会直接返回404错误。 注意: URL_DENY_SUFFIX的优先级比URL_HTML_SUFFIX要高。

七、URL的大小写问题

对于Windows来说URL是不区分大小写的,但是在Linux下是区分大小写的,但是TP框架给了我们配置的权利,我们可以通过配置 'URL_CASE_INSENSITIVE' =>true 来达到在任何平台下都不区分大小写。

这里需要注意一个地方,一旦开启了不区分URL大小写后,如果我们要访问类似UserTypeController的控制器,那么正确的URL访问应该是: // 正确的访问地址 http://serverName/index.php/home/user_type/index // 错误的访问地址(linux环境下) http://serverName/index.php/home/usertype/index。

利用系统提供的U方法可以为你自动生成相关的URL地址。

如果设置 'URL_CASE_INSENSITIVE' =>false。

的话,URL就又变成: http://serverName/index.php/Home/UserType/add 注意:URL不区分大小写并不会改变系统的命名规范,并且只有按照系统的命名规范后才能正确的实现URL不区分大小写。

建议还是习惯性的区分大小写吧,系统默认的规范是根据URL里面的模块名、控制器名来定位到具体的控制器类的,从而执行控制器类的操作方法。

八、库文件自动加载的顺序(优先级)

在实际的应用类库加载过程中,往往会涉及到自动加载的优先级问题,以Test\MyClass类为例,自动加载的优先顺序如下: 1.判断是否有注册了Test\MyClass类库映射,如果有则自动加载类库映射定义的文件; 2.判断是否存在Library/Test目录,有则以该目录为初始目录加载; 3.判断是否有注册Test根命名空间,有则以注册的目录为初始目录加载; 4.如果以上都不成立,则以Test为模块目录进行初始目录加载; 5.然后以上面获取到的初始目录加载命名空间对应路径的文件;

九、TP常用函数

U('/Admin/Insert/insert@localhost’)。

$config = C('参数名称');

// 实例化Home模块的User控制器$User = new \Home\Controller\UserController();// 实例化Admin模块的Blog控制器$Blog = new \Admin\Controller\BlogController();

系统为上面的控制器实例化提供了一个快捷调用方法A,上面的代码可以简化为:

// 假设当前模块是Home模块$User = A('User'); $Blog = A('Admin/Blog');

默认情况下,A方法实例化的是默认控制器层(Controller),如果你要实例化其他的分层控制器的话,可以使用:

// 假设当前模块是Home模块// 实例化Event控制器$User = A('User','Event'); $Blog = A('Admin/Blog','Event');

上面的代码等效于:

// 实例化Home模块的User事件控制器$User = new \Home\Event\UserEvent();// 实例化Admin模块的Blog事件控制器$Blog = new \Admin\Event\BlogEvent();