当前位置: 首页 > news >正文

Thinkphp 5框架学习

TP框架主要是通过URL实现操作

http://servername/index.php/模块/控制器/操作/参数/值..

index.php 为入口文件,在 public 目录内的 index.php 文件;
模块在 application 目录下默认有一个 index 目录,这就是一个模块;
而在 index 目录下有一个 controller 控制器目录的 Index.php 控制器;
Index.php 控制器的类名也必须是 class Index,否则错误:
而操作就是控制器 class Index 里面的方法,比如: index 或 hello;
那么完整形式为: public/index.php/index/index/index
晕了吗?
官方给的默认模块,默认控制器,默认操作都是 index 

环境变量

 ThinkPHP5.1 提供了一个类库 Env 来获取环境变量:  return Env::get('app_path');
系统路径          Env 参数名称
应用根目录        root_path
应用目录           app_path
框架目录           think_path
配置目录           config_path
扩展目录           extend_path
composer 目录   vendor_path
运行缓存目录     runtime_path

路由目录           route_path

当前模块目录    moudle_path 


 控制器

定义:控制器,即 controller,控制器文件存放在 controller 目录下;
类名和文件名大小写保持一致,并采用驼峰式首字母大写) ;

use think Controller;
class Index extends Controller

继承控制器基类,可以更方便使用功能,但不是必须的:
系统也提供了其它方式,在不继承的情况下完成相同功能;
前面我们知道如果是一个单词,首字母大写,比如 class Index;
URL 访问时直接 public/index 即可;
那么如果创建的是双字母组合,比如 class Helloworld;
URL 访问时必须为: public/hello_world;

如果你想原样的方式访问 URL,则需要关闭配置文件中自动转换:
'url convert=> false,
此时,URL 访问可以为: public/Helloworld;
如果你想改变根命名空间 app 为其它,可以在根目录下创建.env 文
然后写上配对的键值对即可,app_namespace=application; 

渲染输出 
<?php
namespace app\index\controller;
use think\facade\Env;class HelloWorld{public function test1(){return view();}
}

配置:在模块目录下,controller同级目录创建view目录,在该目录下创建相同控制器名的文件夹,在控制器文件夹里创建 方法名.html

 一 般来说,正常页面都是 html 输出,用于模版,AJAX 默认为 json;
如果继承了基类控制器,那么可以定义控制器初始化方法: initialize();
initialize()方法会在调用控制器方法之前执行:且不能用return返回,否则无效果

protected function initialize(){
//parent::initialize();
echo 'init';
}

前置操作

1. 继承 Controller 类后可以设置一个$beforeActionList 属性来创建前置方注

use think\Controller;
class Before extends Controller
{protected $beforeActionList=['first','second'=>['except'=>'one'],'third'=>['only'=>'one']];protected function first(){echo 'first';}protected function second(){echo 'second';}protected function third(){echo 'third';}public function index(){if ($this->flag){$this->success('注册成功','../');}else{$this->error('失败');return 'index';}}
public function one(){return 'one';
}
public function two(){return 'two';
}
public function three(){return 'three';
}
}

此时,我们可以分别 URL 访问不同的方法来理解前置的触发执行;

跳转和重定向

Controller 类提供了两个跳转的方法success(msg,ur)和 error(msg)

   protected $flag = false;public function index(){if ($this->flag){$this->success('注册成功','../');}else{$this->error('失败');return 'index';}}

成功或错误有一个固定的页面模版:thinkphp/tpl/dispatch jump
在 app.php 配置文件中,我们可以更改自己个性化的跳转页面;
//默认跳转页面对应的模板文件
'dispatch success tmpl' => Env::get('think path') 

Controller类提供了 _empty()方法用于对应不存在的方法访问

public function _empty($name){return "不存在方法".$name;}

控制器不存在的对应

<?php
namespace app\index\controller;
use think\Request;
class Error{public function index(Request $r){return '不存在'.$r->controller();}
}?>

模型定义

1. 在 MVC 中,我们已经使用过 Controller(c),View(V),剩下一个就是 Model(M);
Mode1 即模型,就是处理和配置数据库的相关信息;
2 .在项目应用根目录创建 model 文件夹,并且创建 User.php;

数据库查询(链式查询) 

查询规则
1。 前面课程中我们通过指向符号“->”多次连续调用方法称为: 链式查询:
当 Db::name('user')时,返回数据库对象,即可连缀数据库对应的方法:
2 .而每次执行一个数据库查询方法时,比如 where(),还将返回数据库对象;
3 .只要还是数据库对象,那么就可以一直使用指向符号进行链式查询:
如果想要最后得到结果,可以使用 find()、select()等方法结束查询;
而 find()和 select()是结果查询方法(放在最后) ,并不是链式查询方法;
Db::name( 'user')->where( 'id',27)->order( 'id','desc')->find()
除了查询方法可以使用链式连贯操作,CURD 操作也可以使用 (下节课研究) :

<?php
namespace app\index\controller;
use think\Controller;
use think\Db;
use app\index\model\Info;
class DataTest extends Controller{public function t(){#SELECT * FROM `info` LIMIT 1$data = Db::table('info')->find();return Db::getLastSql();}public function t0(){#SELECT * FROM `info`$data = Db::table('info')->select();return Db::getLastSql();}public function t1(){#SELECT * FROM `info` WHERE `name` = 'admin' LIMIT 1$data = Db::table('info')->where('name','admin')->find();return Db::getLastSql();}public function t2(){#SELECT `name` FROM `info` LIMIT 1$data = db('info')->value('name');echo $data;return Db::getLastSql();}public function t3(){#SELECT `name` FROM `info`$data = db('info')->column('name','id');return json($data);}public function getModelData(){$data=Info ::select();#return json($data);}
}?>

相关文章:

Thinkphp 5框架学习

TP框架主要是通过URL实现操作 http://servername/index.php/模块/控制器/操作/参数/值.. index.php 为入口文件&#xff0c;在 public 目录内的 index.php 文件; 模块在 application 目录下默认有一个 index 目录&#xff0c;这就是一个模块; 而在 index 目录下有一个 contro…...

麒麟云增加计算节点

一、安装基座系统并配置好各项设置 追加的计算节点服务器&#xff0c;安装好系统&#xff0c;把主机名、网络网线&#xff08;网线要和其他网线插的位置一样&#xff09;、hosts这些配置好&#xff0c;在所有节点的/etc/hosts里面添加信息 在控制节点添加/kylincloud/multinod…...

使用Redis进行搜索

文章目录 构建反向索引 构建反向索引 在Begin-End区域编写 tokenize(content) 函数&#xff0c;实现文本标记化的功能&#xff0c;具体参数与要求如下&#xff1a; 方法参数 content 为待标记化的文本&#xff1b; 文本标记的实现&#xff1a;使用正则表达式提取全小写化后的…...

Oracle修改用户密码

文章目录 Oracle修改用户密码Oracle用户锁定常见的两种状态Oracle用户锁定和解锁 Oracle修改用户密码 使用sys或system使用sysdba权限登录&#xff0c;然后执行以下命令修改密码&#xff1a; alter user 用户名 identified by 密码;密码过期导致的锁定&#xff0c;也通过修改…...

​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 描述&#xff1a; 圣诞活动预…...

Vue解决跨域问错误:has been blocked by CORS policy 后端跨域配置

解决跨域问题后端跨域配置代码&#xff1a; /*** 作者 hua* 描述 跨域配置*/ Configuration public class WebConfiguration implements WebMvcConfigurer {/*** 跨域配置对象* return CorsConfiguration对象*/private CorsConfiguration corsConfig() {CorsConfiguration cor…...

【谷歌云】注册谷歌云 创建Compute Engine

文章目录 一、Google Cloud注册1.1 账号信息1.2 付款信息验证1.3 验证成功 二、Compute Engine创建2.1 启动Compute Engine API2.2 创建实例2.3 新建虚拟机实例2.4 等待实例创建完成2.5 查看虚拟机配置信息2.6 创建防火墙规则2.7 SSH远程连接虚拟机 三、参考链接 一、Google Cl…...

面试数据库八股文五问五答第四期

面试数据库八股文五问五答第四期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;什么情况下 mysql 会索引失效&#xff1f; 不使用索引列进行查询&a…...

2023 年中国金融级分布式数据库市场报告:TiDB 位列领导者梯队,创新能力与增长指数表现突出

近日&#xff0c;沙利文联合头豹研究院发布了中国数据库系列报告之《2023 年中国金融级分布式数据库市场报告》。 报告认为&#xff0c;金融行业对于分布式数据库信任度与认可度正在逐步提高&#xff0c;中国金融级分布式数据库市场正处于成熟落地的高增长阶段&#xff0c;行业…...

基于ExoPlayer的缓存方案实现

音视频APP 的一个必备功能就是在播放的时候会持续缓存完整个音频,同时进度条会更新缓存进度。但是目前Google推出的播放器ExoPlayer本身并没有提供什么方便的接口去实现这个功能,因此大多数的开发者可能会使用AndroidVideoCache 开源库来实现缓存。 AndroidVideoCache 的原理…...

前缀和算法 -- 寻找数组的中心坐标

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 本题链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 输入描述 给定一个数组&#xff0c;接口为int pivotIndex(vector<int>& nums) 输出描述 我们以示例1为例画图解释&#xf…...

autograd与逻辑回归

一、autograd—自动求导系统 torch.autograd.backward() torch.autograd.backward()是PyTorch中用于计算梯度的函数。以下是对该函数的参数的解释&#xff1a; 功能&#xff1a;自动求取梯度 • tensors: 用于求导的张量&#xff0c;如 loss • retain_graph : 保存计算图 •…...

Xshell 从github克隆项目:使用ssh方式。

接上文&#xff1a; https://blog.csdn.net/liu834189447/article/details/135247868 是能克隆项目了&#xff0c;但是速度太磕碜了&#xff0c;磕碜到难以直视。 找到另外一种办法&#xff0c;使用SSH克隆项目 速度嘎嘎猛。 首先得能进得去github网站&#xff0c;不能点上边…...

C++:通过erase删除map的键值对

map是经常使用的数据结构,erase可以删除map中的键值对。 可以通过以下几种方式使用erase 1.通过迭代器进行删除 #include <iostream> #include <map> #include <string> using namespace std;void pMap(const string& w, const auto& m) {cout&l…...

华为月薪25K的自动化测试工程师到底要会那些技能!

​前言 3年自动化测试软件测试工程师职业生涯中&#xff0c;我所经历过的项目都是以自动化测试为主的。由于自动化测试是一个广泛的领域&#xff0c;我将自己的经验整理了一下分享给大家&#xff0c;话不多说&#xff0c;直接上干货。 自动化测试的目标和实践选择合适的自动化…...

diffusers 源码待理解之处

一、训练DreamBooth时&#xff0c;相关代码的细节小计 ** class_labels timesteps 时&#xff0c;模型的前向传播怎么走&#xff1f;待深入去看 ** 利用class_prompt去生成数据&#xff0c;而不是instance_prompt class DreamBoothDataset(Dataset):"""A dat…...

正则表达式 详解,10分钟学会

大家好&#xff0c;欢迎来到停止重构的频道。 本期我们讨论正则表达式。 正则表达式是一种用于匹配和操作文本的工具&#xff0c;常用于文本查找、文本替换、校验文本格式等场景。 正则表达式不仅是写代码时才会使用&#xff0c;在平常使用的很多文本编辑软件&#xff0c;都…...

【排序算法】归并排序与快速排序:深入解析与比较

文章目录 1. 引言2. 归并排序&#xff08;Merge Sort&#xff09;3. 快速排序&#xff08;Quick Sort&#xff09;4. 归并排序与快速排序的比较5. 结论 1. 引言 排序算法是计算机科学中最基本且至关重要的概念之一。它们不仅是理解更复杂算法和数据结构的基石&#xff0c;而且…...

万字长文谈自动驾驶bev感知(一)

文章目录 prologuepaper listcamera bev :1. Lift, Splat, Shoot: Encoding Images from Arbitrary Camera Rigs by Implicitly Unprojecting to 3D2. M2BEV: Multi-Camera Joint 3D Detection and Segmentation with Unified Birds-Eye View Representation3. BEVDet: High-Pe…...

cfa一级考生复习经验分享系列(十七)

考场经验&#xff1a; 1.本人在Prometric广州考试中心&#xff0c;提前一天在附近住下&#xff0c;地方比较好找&#xff0c;到了百汇广场北门&#xff0c;进去就可以看见电梯直达10楼。进去之后需要现场检查行程卡和健康码&#xff0c;然后会问最近你有没有发烧咳嗽等问题&…...

给视觉开发新手的保姆级教程:在Ubuntu上从下载源码到成功运行Demo,搞定OpenCV 3环境搭建

给视觉开发新手的保姆级教程&#xff1a;在Ubuntu上从下载源码到成功运行Demo&#xff0c;搞定OpenCV 3环境搭建 第一次在Ubuntu上搭建OpenCV开发环境&#xff0c;对很多视觉开发新手来说可能是个令人望而生畏的任务。命令行操作、编译工具链、环境配置……这些术语听起来就让人…...

别再让FTP匿名登录成后门!手把手教你加固vsftpd服务(附CentOS 7实战配置)

企业级vsftpd安全加固实战指南&#xff1a;从匿名登录风险到全方位防护 FTP服务作为企业文件传输的经典解决方案&#xff0c;至今仍在许多组织的IT架构中扮演重要角色。然而&#xff0c;默认配置下的vsftpd服务往往隐藏着致命的安全隐患——匿名登录功能如同一扇未上锁的后门&a…...

对比按需计费与Token Plan套餐的实际支出感受

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比按需计费与Token Plan套餐的实际支出感受 1. 引言&#xff1a;两种计费模式的选择 对于个人开发者或小型团队而言&#xff0c…...

树莓派+Ollama分离部署OpenClaw:打造家庭局域网AI助手

1. 项目概述&#xff1a;在树莓派上部署OpenClaw&#xff0c;实现本地网络AI助手最近在折腾我的家庭实验室&#xff0c;想把AI助手的能力从主力电脑上解放出来&#xff0c;让它变成一个常驻在角落里的独立服务。我的主力机性能不错&#xff0c;跑大语言模型没问题&#xff0c;但…...

TrendForge 每日精选:10 个热门开源项目,今日总获星 11321 颗!

TrendForge 每日精选热门开源项目发布 TrendForge 致力于追踪全球开源项目动态&#xff0c;每日为开发者精选最具价值的 GitHub 项目。今日共收录 10 个热门项目&#xff0c;项目描述已自动翻译为智能中文翻译版&#xff0c;便于理解。 今日最热项目 Top 10 mattpocock/skills&…...

告别MQTT!用Python Socket自建轻量数据通道,ESP32直连MySQL并更新网页状态

告别MQTT&#xff01;用Python Socket自建轻量数据通道&#xff0c;ESP32直连MySQL并更新网页状态 在物联网项目开发中&#xff0c;MQTT协议因其轻量级和发布-订阅模式而广受欢迎。然而&#xff0c;当我们需要更精细地控制数据传输流程、减少中间件依赖或优化资源使用时&#x…...

第八部分-企业级实践——37. 容器编排选型

37. 容器编排选型 1. 容器编排概述 容器编排平台负责管理容器的整个生命周期&#xff0c;包括部署、扩缩容、负载均衡、服务发现、滚动更新等。Docker Swarm 和 Kubernetes 是目前主流的容器编排方案。 ┌──────────────────────────────────…...

玩转OurBMC第二十六期:OpenBMC固件远程更新原理与实践(下)

栏目介绍&#xff1a;“玩转OurBMC” 是OurBMC社区开创的知识分享类栏目&#xff0c;主要聚焦于社区和BMC全栈技术相关基础知识的分享&#xff0c;全方位涵盖了从理论原理到实践操作的知识传递。OurBMC社区将通过 “玩转OurBMC” 栏目&#xff0c;帮助开发者们深入了解到社区文…...

从零上手CircuitJS1:开源电路仿真工具的核心功能与实战演练

1. 初识CircuitJS1&#xff1a;浏览器里的电子实验室 第一次打开CircuitJS1时&#xff0c;我仿佛回到了大学电子实验室——只不过这次所有仪器都装进了浏览器窗口。这个完全开源的工具用JavaScript重构了经典的Falstad电路模拟器&#xff0c;不需要安装任何插件就能在Chrome或…...

NPC逆变器模糊超螺旋滑模控制【附仿真】

✨ 长期致力于NPC型逆变器、滑模控制、超螺旋算法、模糊控制、电能质量优化研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;改进型超螺旋滑模变结构控…...