PHP:ThinkPHP ゝ一世哀愁。 2022-05-23 11:53 228阅读 0赞 **url命令** 是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、HTTPS、 [ftp][] 等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl可以祝一臂之力。 实验楼下载地址: [http://labfile.oss.aliyuncs.com/courses/352/ThinkPHP.zip][http_labfile.oss.aliyuncs.com_courses_352_ThinkPHP.zip] 下载方式:wget [http://labfile.oss.aliyuncs.com/courses/352/ThinkPHP.zip][http_labfile.oss.aliyuncs.com_courses_352_ThinkPHP.zip] 下载ThinkPHP: 进入目录:unzip ThinkPHP.zip,里面包含了ThinkPHP相关的程序文件以及创建数据表需要的sql文件; 可以去官网下载,或者去git地址下载,然后直接解压 使用composer create-project topthink/thinkphp your-project-name安装 数据库操作: 启动msql服务:sudo service mysql start 登录mysql:mysql -u root 创建数据库:create database think 切换数据库:use think 导入数据:source I:\\php\_project\\ThinkPHP\\think.sql 退出数据库:quit/ctrl+d 操作: thinkPHP框架的所有所有配置文件的定义格式都是返回PHP数组的方式来定义的 return array ( //' 配置项 '=>' 配置值 ' ) ; 常用的应用配置:默认在application/common/conf/config.php 配置参数(一级参数)是不区分大小写,因为最后都会转为小写,但是为了规范,建议统一使用大写设置参数,二级配置是区分大小写的,也都是在上述目录配置 配置加载顺序:后加载的会覆盖前面加载的顺序,而生效的只有后加载的顺序文件; thinkPHP配置加载顺序 : 惯例配置->应用配置->模式配置->调试配置->状态配置->模块配置->扩展配置->动态配置,这些配置都是自动加载,常用的是应用配置,默认就在application/common/conf/config.php文件中,如果不熟悉配置,打开thinkPHP/Conf/convent.php文件查看对应配置项 读取配置项:统一使用C(‘配置参数名’)来读取配置 ThinkPHP路由: 给你一个自定义URL的功能: [http://localhost:8999/Home/index/read/id/3][http_localhost_8999_Home_index_read_id_3] PHP内置服务器启动: **php -S localhost:8999,**访问 [http://localhost:8999/][http_localhost_8999],出现欢迎界面;分析:访问到底额是thinkPHP自带的默认入口文件index.php,也就是IndexController的index方法,这是因为thinkPHP默认设置: 'DEFAULT\_CONTROLLER' => 'Index' , // 默认控制器名称 控制器文件位于Application/Home/Controller 使用路由之前,确保URL支持PATH\_INFO(普通模式不支持路由功能)和URL\_ROUTE\_ON=true(要开启),这些在thinkPHP/Conf/convention.php可以找到,满足后就可以配置路由规则了,在配置文件中使用URL\_ROUTE\_RULES参数配置,格式为数组,格式为:‘路由表达式’=> '路由地址和传入参数',每个元素都代表一个路由规则 URL\_ROUTE\_RULES:按照配置顺序依次匹配,一旦匹配到就会定位到路由定义的控制器和方法中去执行,而后面的规则不会匹配,:后面跟参数名称, \\d:限制变量是数字 \[\]:可选参数,可以传也可以不传 URL\_MAP\_RULES:静态路由,不包含动态参数,不需要遍历路由规则而是直接定位,采用这个定义,同时是完整匹配的原则 ThinkPHP控制器: 控制器文件命名遵守IndexController.class.php方式 控制器定义: 1.使用相同的命名空间,默认为namespace Home\\Controller 2.加载Think\\Controller 3.新建控制器继承与Controller(或者子类) 4.采用驼峰命名法,注意首字母大写 前置和后置操作:执行某个操作之前和之后自动调用的方法,仅对控制器有效,但是如果当前操作没有定义操作方法,而是直接渲染模板文件,前置和后置都会生效,真正有模板输出的只是当前操作,前置后置不会有任何输出;如果有些方法使用了exit或者错误输出之类的,可能不会执行后置方法; 参数绑定( URL\_PARAMS\_BIND):直接绑定URL地址的变量作为操作方法参数,简化方法定义和路由解析,原理为将URL中参数和操作方法参数进行绑定,按照变量名绑定,变量顺序绑定,默认变量名绑定; 伪静态 'URL\_HTML\_SUFFIX' URL生成:U方法,url动态生成,定义规则如下:U(‘姿势表达式’,\[参数\],\[伪静态后缀\],\[显示域名\]),\[模块/控制器/操作\#锚点@域名\]?参数1=值1&参数2=值2...,如果不定义模块,就表示当前模块,例子:U('Admin/User/select)//生成Admin模块的User控制器的select操作的url地址,第二个参数支持数组和字符串,例子:U('Article/cate', array('cate\_id'=>1, 'statu'=>1)) = U('Article/cate', 'cate\_id=1,&statu=1') = U('Article/cate?cate\_id=1,&statu=1') 跳转:Think/Controller类内置了(success,默认等1s和error默认等3s)方法,用于页面跳转,第一个参数提示信息,第二个参数为跳转地址; 重定向:redirect实现页面的重定向,改变当前URL地址,重定向到某个模块的操作方法 ThinkPHP模型: 位于Home/Model/目录,通常要继承系统\\Think\\Model类或子类 和控制器命名规范一样; 作用是操作数据表的,多数情况是可以自动对应数据表的,可以根据自己需求定制数据表设置和操作; tablePrifix:数据表前缀可以灵活配置你的数据表;如果数据库中有一个没有表前缀的,可以直接定义前缀为空,然后ThinkPHP就会定位到这个表 ThinkPHP实现了ActiveRecords模式的ORM模型,表映射到类,记录映射到对象 自动完成:是ThinkPHP用来完成数据自动处理和过滤的方法,使用create方法创建数据对象会触发自动完成数机制;用来完成默认字段写入,安全字段过滤,业务逻辑自动处理等,通过$\_auto属性定义处理规则;还有一种是auto()方法自动设置完成机制; 自动验证:使用create()创建数据对象时候进行自动数据验证,包括数据类型,业务规则,安全判断等;通常用于表单验证, 验证方式:静态(模型里面使用$\_validate属性定义验证规则),动态(使用模型类validate方法动态创建验证规则),规则定义格式如下:array(array(验证字段1,验证类型,错误提示,\[验证条件,附加规则,验证时间\])) www WEB部署目录(或者子目录) ├─index .php 入口文件 ├─README .md README文件 ├─Application 应用目录 ├─Public 资源文件目录 └─ThinkPHP 框架目录 其中框架目录ThinkPHP的结构如下: ├─ThinkPHP 框架系统目录(可以部署在非web目录下面) │ ├─Common 核心公共函数目录 │ ├─Conf 核心配置目录 │ ├─Lang 核心语言包目录 │ ├─Library 框架类库目录 │ │ ├─Think 核心Think类库包目录 │ │ ├─Behavior 行为类库目录 │ │ ├─Org Org类库包目录 │ │ ├─Vendor 第三方类库目录 │ │ ├─ ... 更多类库目录 │ ├─Mode 框架应用模式目录 │ ├─Tpl 系统模板目录 │ ├─LICENSE .txt 框架授权协议文件 │ ├─logo .png 框架LOGO文件 │ ├─README .txt 框架README文件 │ └─ThinkPHP .php 框架入口文件 入口文件主要完成: * 定义框架路径、项目路径(可选) * 定义调试模式和应用模式(可选) * 定义系统相关常量(可选) * 载入框架入口文件(必须) 注意:APP\_PATH的定义支持相对路径和绝对路径,但必须以“/”结束 接下来再看原来空的 Application 目录下面,已经自动生成了公共模块 Common 、默认的 Home 模块和 Runtime 运行时目录的目录结构: Application ├─ Common 应用公共模块 │ ├─ Common 应用公共函数目录 │ └─Conf 应用公共配置文件目录 ├─Home 默认生成的Home模块 │ ├─Conf 模块配置文件目录 │ ├─ Common 模块函数公共目录 │ ├─Controller 模块控制器目录 │ ├─Model 模块模型目录 │ └─View 模块视图文件目录 ├─Runtime 运行时目录 │ ├─Cache 模版缓存目录 │ ├─ Data 数据目录 │ ├─Logs 日志目录 │ └─Temp 缓存目录 在各个目录下面我们还看到了index.html文件,这是ThinkPHP自动生成的目录安全文件 Application 默认应用目录(可以设置) ├─ Common 公共模块(不能直接访问) ├─Home 前台模块 ├─Admin 后台模块 ├─... 其他更多模块 ├─Runtime 默认运行时目录(可以设置) 每个模块是相对独立的,其目录结构如下: ├─ Module 模块目录 │ ├─Conf 配置文件目录 │ ├─ Common 公共函数目录 │ ├─Controller 控制器目录 │ ├─Model 模型目录 │ ├─Logic 逻辑目录(可选) │ ├─Service Service目录(可选) │ ... 更多分层目录可选 │ └─View 视图目录 控制器类的命名方式是: **控制器名(驼峰法,首字母大写)+Controller** 控制器文件的命名方式是: **类名+class.php(类文件后缀)** **表示当前类是Home模块下的控制器类,命名空间和实际的控制器文件所在的路径是一致的,也就是说:** **Home\\Controller\\IndexController** **类 对应的控制器文件位于应用目录下面的** **Home/Controller/IndexController.class.php** **,如果你改变了当前的模块名,那么这个控制器类的命名空间也需要随之修改** **注意:命名空间定义必须写在所有的PHP代码之前声明,而且之前不能有任何输出,否则会出错** ## **命名规范** ## **使用ThinkPHP开发的过程中应该尽量遵循下列命名规范:** > * **类文件都是以.class.php为后缀(这里是指的ThinkPHP内部使用的类库文件,不代表外部加载的类库文件),使用驼峰法命名,并且首字母大写,例如** **DbMysql.class.php** **;** > * **类的命名空间地址和所在的路径地址一致,例如** **Home\\Controller\\UserController** **类所在的路径应该是** **Application/Home/Controller/UserController.class.php** **;** > * **确保文件的命名和调用大小写一致,是由于在类Unix系统上面,对大小写是敏感的(而ThinkPHP在调试模式下面,即使在Windows平台也会严格检查大小写);** > * **类名和文件名一致(包括上面说的大小写一致),例如** **UserController** **类的文件命名是** **UserController.class.php** **, InfoModel类的文件名是** **InfoModel.class.php** **, 并且不同的类库的类命名有一定的规范;** > * **函数、配置文件等其他类库文件之外的一般是以** **.php** **为后缀(第三方引入的不做要求);** > * **函数的命名使用小写字母和下划线的方式,例如** **get\_client\_ip** **;** > * **方法的命名使用驼峰法,并且首字母小写或者使用下划线“\_”,例如** **getUserName** **,** **\_parseType** **,通常下划线开头的方法属于私有方法;** > * **属性的命名使用驼峰法,并且首字母小写或者使用下划线“\_”,例如** **tableName** **、** **\_instance** **,通常下划线开头的属性属于私有属性;** > * **以双下划线“\_\_”打头的函数或方法作为魔法方法,例如** **\_\_call** **和** **\_\_autoload** **;** > * **常量以大写字母和下划线命名,例如** **HAS\_ONE** **和** **MANY\_TO\_MANY** **;** > * **配置参数以大写字母和下划线命名,例如** **HTML\_CACHE\_ON** **;** > * **语言变量以大写字母和下划线命名,例如** **MY\_LANG** **,以下划线打头的语言变量通常用于系统语言变量,例如** **\_CLASS\_NOT\_EXIST\_** **;** > * **对变量的命名没有强制的规范,可以根据团队规范来进行;** > * **ThinkPHP的模板文件默认是以** **.html** **为后缀(可以通过配置修改);** > * **数据表和字段采用小写加下划线方式命名,并注意字段名不要以下划线开头,例如** **think\_user** **表和** **user\_name** **字段是正确写法,类似** **\_username** **这样的数据表字段可能会被过滤。** **特例:在ThinkPHP里面,有一个函数命名的特例,就是单字母大写函数,这类函数通常是某些操作的快捷定义,或者有特殊的作用。例如:A、D、S、L 方法等等,他们有着特殊的含义,后面会有所了解。** > **由于ThinkPHP默认全部使用UTF-8编码,所以请确保你的程序文件采用UTF-8编码格式保存,并且去掉BOM信息头(去掉BOM头信息有很多方式,不同的编辑器都有设置方法,也可以用工具进行统一检测和处理),否则可能导致很多意想不到的问题。** ## **开发建议** ## **在使用ThinkPHP进行开发的过程中,我们给出如下建议,会让你的开发变得更轻松:** > * **遵循框架的命名规范和目录规范;** > * **开发过程中尽量开启调试模式,及早发现问题;** > * **多看看日志文件,查找隐患问题;** > * **养成使用I函数获取输入变量的好习惯;** > * **更新或者环境改变后遇到问题首要问题是清空Runtime目录;** > > > > > **建议保持大写定义配置参数的规范** > > **需要注意的是,二级参数配置区分大小写,也就说读取确保和定义一致** > > > > > > > > **在ThinkPHP中,一般来说应用的配置文件是自动加载的,加载的顺序是:** > > #### **惯例配置->应用配置->模式配置->调试配置->状态配置->模块配置->扩展配置->动态配置** #### > > > > > **应用配置文件也就是调用所有模块之前都会首先加载的公共配置文件(默认位于** **Application/Common/Conf/config.php** **)。** > > > **如果更改了公共模块的名称的话,公共配置文件的位置也相应改变** [http://serverName/index.php][http_serverName_index.php](或者其他应用入口文件)/模块/控制器/操作/ \[ 参数名/参数值... \] ThinkPHP的应用可以支持切换到命令行访问,如果切换到命令行模式下面的访问规则是: >php.exe index.php(或其它应用入口文件) 模块 /控制器/ 操作 /\[参数名/ 参数值...\] <table style="border-spacing:0px;table-layout:fixed;font-size:15.96px;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);width:979px;"> <tbody> <tr> <td style="text-align:left;border:1px solid rgb(136,136,136);"> <div> <span style="font-size:15.96px;color:rgba(0,0,0,.87);font-family:'Microsoft Yahei', 'Helvetica Neue', Arial, Helvetica, sans-serif;line-height:1.7em;">名称</span> </div></td> <td style="text-align:left;border:1px solid rgb(136,136,136);"> <div> <span style="font-size:15.96px;color:rgba(0,0,0,.87);font-family:'Microsoft Yahei', 'Helvetica Neue', Arial, Helvetica, sans-serif;line-height:1.7em;">描述</span> </div></td> </tr> <tr> <td style="border:1px solid rgb(136,136,136);"> <div> <span style="font-size:15.96px;color:rgba(0,0,0,.87);font-family:'Microsoft Yahei', 'Helvetica Neue', Arial, Helvetica, sans-serif;line-height:1.7em;">应用</span> </div></td> <td style="border:1px solid rgb(136,136,136);"> <div> <span style="font-size:15.96px;color:rgba(0,0,0,.87);font-family:'Microsoft Yahei', 'Helvetica Neue', Arial, Helvetica, sans-serif;line-height:1.7em;">基于同一个入口文件访问的项目我们称之为一个应用。</span> </div></td> </tr> <tr> <td style="border:1px solid rgb(136,136,136);"> <div> <span style="font-size:15.96px;color:rgba(0,0,0,.87);font-family:'Microsoft Yahei', 'Helvetica Neue', Arial, Helvetica, sans-serif;line-height:1.7em;">模块</span> </div></td> <td style="border:1px solid rgb(136,136,136);"> <div> <span style="font-size:15.96px;color:rgba(0,0,0,.87);font-family:'Microsoft Yahei', 'Helvetica Neue', Arial, Helvetica, sans-serif;line-height:1.7em;">一个应用下面可以包含多个模块,每个模块在应用目录下面都是一个独立的子目录。</span> </div></td> </tr> <tr> <td style="border:1px solid rgb(136,136,136);"> <div> <span style="font-size:15.96px;color:rgba(0,0,0,.87);font-family:'Microsoft Yahei', 'Helvetica Neue', Arial, Helvetica, sans-serif;line-height:1.7em;">控制器</span> </div></td> <td style="border:1px solid rgb(136,136,136);"> <div> <span style="font-size:15.96px;color:rgba(0,0,0,.87);font-family:'Microsoft Yahei', 'Helvetica Neue', Arial, Helvetica, sans-serif;line-height:1.7em;">每个模块可以包含多个控制器,一个控制器通常体现为一个控制器类。</span> </div></td> </tr> <tr> <td style="background-color:rgb(241,241,241);border:1px solid rgb(136,136,136);"> <div> <span style="font-size:15.96px;color:rgba(0,0,0,.87);font-family:'Microsoft Yahei', 'Helvetica Neue', Arial, Helvetica, sans-serif;line-height:1.7em;">操作</span> </div></td> <td style="background-color:rgb(241,241,241);border:1px solid rgb(136,136,136);"> <div> <span style="font-size:15.96px;color:rgba(0,0,0,.87);font-family:'Microsoft Yahei', 'Helvetica Neue', Arial, Helvetica, sans-serif;line-height:1.7em;">每个控制器类可以包含多个操作方法,也可能是绑定的某个操作类,每个操作是URL访问的最小单元。</span> </div></td> </tr> </tbody> </table> Common模块是一个特殊的模块,是应用的公共模块,访问所有的模块之前都会首先加载公共模块下面的配置文件( Conf/config.php )和公共函数文件( Common/function.php )。但 **Common模块本身不能通过URL直接访问** ,公共模块的其他文件则可以被其他模块继承或者调用。 [ftp]: http://man.linuxde.net/ftp [http_labfile.oss.aliyuncs.com_courses_352_ThinkPHP.zip]: http://labfile.oss.aliyuncs.com/courses/352/ThinkPHP.zip [http_localhost_8999_Home_index_read_id_3]: http://localhost:8999/Home/index/read/id/3 [http_localhost_8999]: http://localhost:8999/ [http_serverName_index.php]: http://servername/index.php
还没有评论,来说两句吧...