ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
默认入口文件 ![](https://img.kancloud.cn/af/0d/af0de67c1c503cfb975610c4cb2b6f33_1199x567.png) 首先呐,可能是受Laravel的启发,新的TP5框架改掉了之前入口文件放在框架根目录(TP3)的习惯,将入口文件放在了public目录下。此目录下的所以资源都能被URL访问所获取,所以对于一些敏感文件请不要放在这里 TP5支持的URL模式 ![](https://img.kancloud.cn/cb/6c/cb6cfda2d42536d14838dda08d1f0548_1189x596.png) TP5所支持的URL模式相对于TP3是不同的,对于传统的m(模型)c(控制器)a(方法/操作)是不给予支持了 URL大小写问题 ![](https://img.kancloud.cn/a1/00/a100eaa1470301078e52ebda22f2f06f_1237x618.png) 默认情况下,URL是不区分大小写的,也就是说,除了开头用的域名和参数外,后面的控制器,方法名都是不区分大小写的 响应输出 ![](https://img.kancloud.cn/a8/88/a8882346ee0a79df12da631d8e6117df_1133x451.png) 对于TP5控制器,本应可以返回数组(Array)格式,但是需要设置config目录下的app.php(我使用的是TP5.1)中的default_return_type参数。参数默认输出类型为html,将其设置为josn/xml即可 ![](https://img.kancloud.cn/63/76/6376e3a8e4c8a2789ed2d328516bec59_340x54.png) 如果不想更改配置可直接使用exit函数 ![](https://img.kancloud.cn/31/9e/319ecafb8aceab92208e6cb40b23e246_556x102.png) 使用框架类方法读取配置文件注意事项(TP5.1) ![](https://img.kancloud.cn/3b/4a/3b4aede39ae6b0f3f08f6de808601a9d_399x128.png) 在TP5.1之前的框架中,使用这样的方式可以读取到所以配置项以及值。但是在TP5.1中是无法使用的。正确的使用方法如下: ![](https://img.kancloud.cn/fe/1a/fe1afb77e3cfea917793fa93d9fc5845_459x117.png) TP5.1的配置文件集中放置在与application同级目录下的config目录中 ![](https://img.kancloud.cn/8b/ac/8bac2b9950c3f74d45752afa5f0b4782_275x548.png) 这些配置可以在任何位置被使用 如果想要在application\index使用自己配置的数据库,可在config目录下创建index\database.php,这样会覆盖原来config目录下的database.php ![](https://img.kancloud.cn/75/55/75553e4afc9f63f32ac4788aa51ea65b_737x425.png) ![](https://img.kancloud.cn/67/ce/67cecb3367d4551c15f3acc7364f10be_553x195.png) 当然这样的配置只能在application\index目录下生效 多数据库的配置: ![](https://img.kancloud.cn/74/fd/74fd00dc765244f8dcdc9c63f30fcce3_429x314.png) 在database.php文件下添加数据库配置 ![](https://img.kancloud.cn/86/ec/86eca67bf988a05507fa7b1f9076579b_1023x54.png) 读取app这个配置文件: ![](https://img.kancloud.cn/53/90/539087dc0709779fcdf2a0ea95d194f1_412x120.png) 记得要加点,不然会返回NULL 使用助手函数: ![](https://img.kancloud.cn/ba/aa/baaa80be12c27208b3418130ba642244_336x107.png) 如果只获取一级配置项,推荐使用pull方法: ![](https://img.kancloud.cn/d5/ef/d5eff4929fec836af59a74281ae1a3fa_372x103.png) 在配置文件中,app是默认的一级配置文件,是什么意思呢? ![](https://img.kancloud.cn/88/f4/88f40f0b45e1e2c701239c8b7cc2d35c_417x126.png) 上面两种获取配置文件是一致的 使用助手函数: ![](https://img.kancloud.cn/ed/00/ed00401513c4d9f5346f43bad31f99a7_389x133.png) 查询配置文件是否存在: ![](https://img.kancloud.cn/ea/fb/eafb5f5b00ecea1600c5b026dd6a2c6a_414x103.png) 使用助手函数: ![](https://img.kancloud.cn/c9/06/c90646d8a3775789cb756099fd14608f_331x107.png) 动态设置配置文件: ![](https://img.kancloud.cn/a2/1b/a21bb1241d1b7126079b697af5004754_388x151.png) 助手函数(助手函数只有一个,可以通过输入参数的不同实现get、has、set): ![](https://img.kancloud.cn/eb/bf/ebbf094b208069dd27708ed380060267_427x154.png) TP5.1配置文件优先级 application/module_name/config/app.php优先级第一 application/config/app.php优先级第二 application/config/module_name/app.php优先级第三 关于Config下的get方法,我试图使用,但是百度不到 Thinkphp概念个人理解 参数类型约束 1 对一个参数进行类型约束成一个对象后,他会自动的实例化(Request $request) 单例模式、工厂模式、对象树 1 单例模式可以理解为手机制作图纸 2 工厂模式则是可以大批量生产手机的工厂 3 对象注册树则是每个手机都要获得入网许可,每个手机都有自己的IMEI号 Trait类 1 Trait类是为了突破php对继承的数目限制,实现代码复用的一种手段 容器、依赖注入 原理: 任何一个URL访问最终都会访问到控制器中某一个具体的方法 一个控制器对应着一个类,如何进行统一管理? 容器用于类的管理,还可以将类的实例(对象)作为参数,传递给类方法,自动触发依赖注入 依赖注入:将对象类型的数据,以参数的方式传送到方法的参数列表 URL访问:通过GET方式将参数传送到指定控制器方法中,例如 字符串、数值等 如果要传一个对象到方法中呢? 依赖注入:解决向类中方法传入对象 1 容器其实就是对象注册树 2 依赖注入这是为了实现将对象作为参数传入控制器方法 绑定类到容器 1 绑定类到容器,其实就是实例化一个类的过程 闭包 1 如果类是家用筷子,闭包就是一次性的 facade(门面) 1 facade字面意思是门面,作用是静态代理,让动态方法能够静态调用 2 之前每次require其他类的时候,都需要new一个对象出来,才能调用其方法(创建对象后使用->来调用方法),现在能直接调用(使用::调用) 3 要使用门面技术就需要继承TP框架的\think\Facede类 4 比较原始的手段是创建一个继承Facade的类,通过getFacadeClass这个静态方法来手动绑定一个需要静态代理的类的命名空间 5 TP框架中提供了动态绑定的函数,即\think\Facade::bind,需要两个参数,第一个为用来代理的类的命名空间,第二个为需要代理的类的命名空间 绝对路径和相对路径 1 \app\index 和 app\index 的含义是不一样的,前者是绝对路径,而后者是相对路径 ThinkPHP5.1控制器较之前版本的区别 1 在TP5.1中控制器不需要继承 继承父类可以使用父类中已有的属性和方法 Controller.php是不可以使用静态代理的 Request中请求对象的方法: 1.new Request() 2.使用静态代理 \think\Facede\Request 3.使用依赖注入:\think\Request $request 4.使用父类的属性 $request $this->request 数据库连接的方法有三种: 1.全局配置,在config目录的database.php文件中进行配置 2.动态配置,使用\think\Db::connect([])进行配置,只能在本次使用 3.DSN配置,格式如:数据库类型://用户名:密码@数据库地址:端口/数据库名称#字符集类型(例如:utf8) 再传入\think\Db::connect()中 数据库的CURD: 1.插入 单条插入 需要先有一个数组存放数据 Db::insert(data)是普通写入Db::insert( data)是普通写入Db::insert(data)是普通写入Db::insert(data,ture)是使用replace方式写入,只支持mysql数据库 Db::insertGetId(data)写入数据后,返回其id多条插入Db::insertAll( data)写入数据后,返回其id多条插入Db::insertAll(data)写入数据后,返回其id多条插入Db::insertAll(data) 2.查询 单条查询 需要连贯操作进行 * table():需要输入完整的数据库名称 * where(): 设置查询条件 表达式 数组 * 单一条件用表达式 * 多个条件用数组 * find():返回符合条件的第一条数据 where中的查询条件可以写在find()中 field()用于设置接收的字段和设置别名(别名设置在现版本中好像只支持英文别名) 多条查询 select() 遍历时使用foreach可以消掉数据前的下标 3.更新 update() 4.删除 delete() 原生数据库操作: 查询:ELECT id,OwnerId FROM merchant_release_parking_space WHERE id IN (23,24,25) 插入:INSERT merchant_release_parking_space SET OwnerId=11,SpaceAddress=‘华东交通大学停车场’ 更新:UPDATE merchant_release_parking_space SET OwnerId=11 WHERE id=23 删除:DELETE FROM merchant_release_parking_space WHERE OwnerId=11 AND SpaceAddress=‘华东交通大学停车场’ 模型是用于与一张数据表绑定的 需要继承think\Model类 在控制器中可以使用模型来代替数据库连接 例如:Student::等价于Db::table(‘student’),这样返回的数据为对象类型 模板支持前缀,只需要写入剩余部分即可 模板返回的数据为对象类型,普通查询返回的数据非对象,不能进行对象操作 不需要模板直接输出变量有三种方法: 1.调用父类display方法(需要继承 \think\Controller) 2.调用父类视图类实例变量view的display(需要继承 \think\Controller) 3.使用静态调用(\think\Facade\View) 4.依赖注入(\think\View $view) 模板输出: 使用assign将变量传入 * 传入变量可以为: * 一个单独变量 * 多个变量 * 一个数组 * 一个对象 调用assign的方式需要和调用fetch的方式相同,前端才能接收到传过来的变量 模板布局: 为了简化网站中某些固定布局,减少重复劳动 在当前模块中创建view文件夹,创建类似header、footer的html文件,将可能需要重复利用的html拆分到每个html中 需要使用时,通过{include file=’’ /}进行调用 TP框架默认调用为view下 开启全局模板布局可以让用户只关注网站主体部分 需要设置: // 开启全局模板布局 ‘layout_on’ => false, // 全局模板布局名称 ‘layout_name’ => ‘layout’ // 模板布局主题部分 ‘layout_item’ => ‘{text}’ 当访问模板时,优先访问view下的layout模板文件,其中的{CONTENT}为用户可编辑替换的主体部分 模板继承: 相对于模板布局灵活性更好些 通常情况下在view目录下创建public目录,放置一些公共文件,其中base.html为公共继承模板 主体部分改为模块 {block name=’’}{/block} 当需要继承模板时 {extend name=’’ /} 使用标签{block name=’’}{/block}对父类模块进行重写 如果需要显示原父类标签中内容 {block} 验证器验证分为两种: 1.验证器验证 2.独立验证 二者区别:独立验证不依赖用户自定义的验证器类 验证器:新建验证类,继承框架validate类,重写$rule变量 调用方式有三种: 1.调用自定义验证器类进行验证 2.调用系统定义验证器类进行验证(需要先绑定门面和自定义规则类) 3.调用Controller类中validate函数,第一个参数为验证信息,第二个参数为验证规则类(即自定义验证器)(控制器验证) 在用户自定义验证器类的时候,unique参数用于验证输入信息在指定表中是否唯一 confirm参数用于密码验证 TP框架错误信息的输出不但可以在HTML中显示,也可以切换成控制台显示,在config目录下的trace.php中进行设置 在标准html页面中,使用link标签引用css样式,使用script引用js文件,在TP5.1框架中可以使用{load href=""}来引用这两种文件