Php laravel 留言板 curd 实战

1. 项目创建

首先我们用composer创建项目 , composer会根据当前的php版本 帮我们选择支持的最高版本

composer create-project --prefer-dist laravel/laravel myblog

laravel新版本比较激进 ,需要最低 php7 支持

2. 项目配置 数据库配置 ,时区配置 ,路由配置等等

项目配置主要在根目录下的 .env 文件中

主要是数据库配置   和 redis的配置 

//数据库配置
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
//redis配置
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

注意 config / app.php 文件 ,改时区,一般默认是PRC

'timezone' => 'PRC',

3. 留言板增删改查   

public function addsave(Request $request){$postdata = $request->all();//验证数据$rules = ['title' => 'required|unique:dw_msg|max:100',  /*此处规则为必须  标题唯一,验证器会到dw_msg里找   最长长度为100个字符*/'content' => 'required|max:100',];$validator = Validator::make($postdata, $rules);if ($validator->fails()) {return redirect('error')->withErrors($validator)->withInput();}else{$u = json_decode(json_encode(Session::get('userinfo')[0]),true);$res = DB::insert('insert into dw_msg (title,content,uid,time) values (:title,:content,:uid,:time)', ['title'=>$postdata['title'],'content'=>$postdata['content'],'uid'=>$u['uid'],'time'=>time() ]);if($res){return redirect('/');}else{echo 'insert  data  fails';exit();}}}

这里主要介绍添加数据这个操作 。

这里使用到  接收参数的Request包   , 验证数据的Validator包  和 数据库DB包  和 会话控制包 Session  ,分别需要在头部引入

use Illuminate\Http\Request; //默认导入的包
use Illuminate\Support\Facades\Validator;
use DB;  //等同于 use Illuminate\Support\Facades\DB;
use Session;

可以看到类中大量导入 Illuminate\Support\Facades    这个命名空间下的类 。

Facades 是 laravel 中比较核心的类库 ,包括诸如 session ,DB,Route 等等底层类

4. 分页

laravel中实现分页也比较简单

$results = DB::table('dw_msg')->orderBy('id','desc')->paginate(8);
return view('msg.index', ['list'=>$results]);

视图页码显示:

{{$list->links()}}

默认显示样式:

还有一种是  simplePaginate(15);     这种只显示上一页 和下一页

5. 登录模块 和 session 的使用

$res = DB::select('select * from dw_user where username = :u', ['u' => $postData['username']]);
$tmp = json_decode(json_encode($res),true);
$md_for_pass = set_passwords($postData['password'],$tmp[0]['salt']);
if($tmp[0]['password']== $md_for_pass){Session::put('userinfo',$res);Session::save();echo 'login success';exit();
}else{echo 'login fail';exit();
}

对象转换数组的方法:

$tmp = json_decode(json_encode($res),true);

一般DB类查询数据 ,都会返回  stdclass 对象   ,可直接使用  ,可转换使用

6. 加入验证码

验证码使用composer引入第三方的类

composer require "gregwar/captcha 1.*"

控制器:

namespace App\Http\Controllers\User;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Gregwar\Captcha\CaptchaBuilder;
use Session;class codeController extends Controller
{public function captcha($temp){$builder = new CaptchaBuilder();$builder->build(100,32);$phrase = $builder->getPhrase();//把内容存入sessionSession::flash('milkcaptcha', $phrase); //存储验证码ob_clean();return response($builder->output())->header('Content-type','image/jpeg');}}

视图使用:

验证码:<img src="/getcode/1" alt="点击刷新" onclick="this.src='/getcode/'+ Math.random();"  style="cursor:pointer" align="absmiddle"/> 

参考:laravel自带验证码类的使用 - 程序员大本营

7. redis的使用

composer导入:

composer require predis/predis

首先需要引入

use Illuminate\Support\Facades\Redis;try{Redis::set('key','value123123');$value = Redis::get('key');echo $value;
}catch (\Exception $e){//返回服务器内部错误 500 的响应码echo $e->getMessage();
}

8. model层的使用

namespace App;use Illuminate\Database\Eloquent\Model;class dw_msg extends Model
{//protected $table="dw_msg";protected $primaryKey = "id";protected $fillable = ['title', 'content', 'uid',];public $timestamps = false;
}
 

1. protected $table="dw_msg"     默认规则是模型类名的复数作为与其对应的表名,除非在模型类中明确指定了其它名称 

  

2. protected $primaryKey = "id";  默认每张表的主键名为id ,你可以在模型类中定义一个$primaryKey 属性来覆盖该约定

3. protected $fillable   用于调用create()  方法时候 的白名单。 如图定义了 'title', 'content', 'uid' 字段

4. public $timestamps = false;  默认情况下,Eloquent 期望created_at 和updated_at 已经存在于数据表中,如果你不想要这些 Laravel自动管理的列,在模型类中设置$timestamps 属性为false

常见的增删改查方法,具体可查看线上手册

//获取所有记录
$flights = Flight::all();// 获取匹配查询条件的第一个模型...
$flight = App\Flight::where('active', 1)->first();//插入数据
$flight = new Flight;
$flight->name = $request->name;
$flight->save();//更新数据
$flight = App\Flight::find(1);
$flight->name = 'New Flight Name';
$flight->save();//删除
$deletedRows = App\Flight::where('active', 0)->delete();

9.要注意的几个问题

        

    9.1  公共函数如何添加

    1.在app/Helper/下新建functions.php 文件 

    2. 打开项目根目录下的 composer.json 文件,找到"autoload" 配置项,补充如下代码:

"files":["app/Helper/functions.php"]

    

   3. 在根目录执行 

composer dump-auto

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/77401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTP 压力测试工具autocannon(AI)

简介 autocannon 是一款基于 Node.js 的高性能 HTTP 压力测试工具&#xff0c;适用于评估 Web 服务的并发处理能力和性能瓶颈。 一、工具特点 高性能‌&#xff1a;利用 Node.js 异步非阻塞机制模拟高并发请求‌。‌实时监控‌&#xff1a;测试过程中动态展示请求统计和性能…

LVM 扩容详解

目录 一、LVM扩容 1. 查看磁盘分区情况&#xff1a; 2. 查看pv、vg、lv 情况 3. 将新硬盘分区初始化 4. 将初始化后的分区添加到VG中 5. 查看逻辑卷的设备路径 6. VG分配给lv 二、扩展文件系统 1.确认文件系统类型 三、检验 一、LVM扩容 1. 查看磁盘分区情况&#xff1a; …

每日一题(小白)数组娱乐篇21

由于题意可知我们是要将对应的数字转换为英文&#xff0c;我们要考虑两点一个是进制的转换&#xff0c;也就是类似于我们的十进制一到9就多一位&#xff0c;这里的进制就是Z进制也就是27进制一旦到26下一位则进位&#xff1b;另一方面要考虑数字的转换也就是1~26对应A~Z。解决上…

python爬虫:喜马拉雅案例(破解sign值)

声明&#xff1a; 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 根据上一篇文章&#xff0c;我们破解了本网站的&#xff0c;手机号和密码验证&#x…

深入探讨:Spring 如何接入 DeepSeek​

​在当今数字化浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;技术的迅猛发展深刻地改变着各个领域的技术格局。Java 作为一种广泛应用于企业级开发的编程语言&#xff0c;其生态系统也在不断演进以适应 AI 技术的融入。Spring 框架&#xff0c;作为 Java 生态中的中流…

VSCode运行,各类操作缓慢,如何清理

VSCode写代码&#xff0c;随着项目逐步进展&#xff0c;代码量在增加&#xff0c;依赖的第三方头文件也在增加&#xff0c; 先是发现代码提示的速度变慢&#xff0c; 后来格式化代码速度太慢 然后c/c代码的语法检查有时候压根就失败&#xff0c;来个错误提示 还有source contro…

Elasticsearch:加快 HNSW 图的合并速度

作者&#xff1a;来自 Elastic Thomas Veasey 及 Mayya Sharipova 过去&#xff0c;我们曾讨论过搜索多个 HNSW 图时所面临的一些挑战&#xff0c;以及我们是如何缓解这些问题的。当时&#xff0c;我们也提到了一些计划中的改进措施。本文正是这项工作的成果汇总。 你可能会问…

人事|人事管理系统|基于Springboot+vue的人事管理系统设计与实现(源码+数据库+文档)

人事管理系统 目录 基于Springboot的人事管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员登录 2、员工管理 3、公告信息管理 4、公告类型管理 5、培训管理 6、培训类型管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新…

2.4GHz射频前端噪声系数优化架构

2.4GHz射频前端电路架构由信号处理链路、硬件模块及性能规范构成&#xff0c;其系统组成与参数要求如下&#xff1a; 一、信号发射链路‌ 数字基带信号通过DAC转换为模拟信号‌ 调制电路将信号加载至本地振荡器生成的2.4GHz载波‌ 功率放大器将信号强度提升至20-25dBm范围‌ …

开源 LLM 应用开发平台 Dify 全栈部署指南(Docker Compose 方案)

开源 LLM 应用开发平台 Dify 全栈部署指南&#xff08;Docker Compose 方案&#xff09; 一、部署环境要求与前置检查 1.1 硬件最低配置 组件要求CPU双核及以上内存4GB 及以上磁盘空间20GB 可用空间 1.2 系统兼容性验证 ✅ 官方支持系统&#xff1a; Ubuntu 20.04/22.04 L…

Trae AI 保姆级教程:从安装到调试全流程指南

Trae AI 保姆级教程&#xff1a;从安装到调试全流程指南 Trae AI 是字节跳动推出的一款 AI 原生集成开发环境(IDE)&#xff0c;专为中文开发者设计&#xff0c;集成了 Claude 3.5 和 GPT-4o 等先进 AI 模型&#xff0c;支持通过自然语言交互实现代码生成、项目构建与调试。本教…

博物馆小程序怎么做?从0到1打造数字化文化窗口

博物馆小程序怎么做&#xff1f;从0到1打造数字化文化窗口 一、行业痛点&#xff1a;传统博物馆的数字化困局 在数字化浪潮下&#xff0c;传统博物馆普遍面临三大挑战&#xff1a; ​​客流受限​​&#xff1a;线下接待能力有限&#xff0c;难以触达更广泛人群 ​​互动单一…

基于 Netty 框架的 Java TCP 服务器端实现,用于启动一个 TCP 服务器来处理客户端的连接和数据传输

代码&#xff1a; package com.example.tpson_tcp;import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; imp…

深入解析原生鸿蒙中的 RN 日志系统:从入门到精通!

全文目录&#xff1a; 开篇语&#x1f4d6; 目录&#x1f3af; 前言&#xff1a;鸿蒙日志系统究竟有多重要&#xff1f;&#x1f6e0;️ 鸿蒙 RN 日志系统的基础结构&#x1f4dc; 1. 日志的作用⚙️ 2. 日志分类 &#x1f527; 如何在鸿蒙 RN 中使用日志系统&#x1f58b;️ 1…

算法训练营Day01(二分 双指针)

704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 关于二分查找 最重要的是要处理好边界问题&#xff0c;每次写完边界可以带入特殊值进行测试确定区间的不变量是什么&#xff1f;比如区间的左闭右闭&#xff0c;和左闭右开&#xff0c;每次二分完的新区间&#xff0c;一…

shadcn 使用步骤与注意点

目录 一、shadcn ui 二、使用流程 1.安装 2.颜色与主题 3.引用blocks 三、使用注意点 四、推荐搭配工具 五、总结 一、shadcn ui 官网&#xff1a;Build your component library - shadcn/ui 为何选择它&#xff1f;因为它是一个基于 Tailwind CSS Radix UI 的组件集…

STM32CubeMX-H7-12-IIC读写MPU6050模块(中)-MPU6050模块详解以及软件IIC驱动

前言 上一篇我们已经完成对IIC代码基本框架的编写&#xff0c;以及获取MPU6050的ID&#xff0c;接下来我们逐一分析这个模块的功能&#xff0c;并用IIC驱动 建议看完上一篇再来看这篇 MPU6050寄存器介绍 1.电源管理寄存器&#xff08;PWR_MGMT_1&#xff0c;地址&#xff1a;0…

量子计算模拟中的GPU加速:从量子门操作到Shor算法实现

一、量子模拟的算力困境与GPU破局 量子计算模拟面临‌指数级增长的资源需求‌&#xff1a;n个量子比特的态向量需要2^n个复数存储空间。当n>30时&#xff0c;单机内存已无法承载&#xff08;1TB需求&#xff09;。传统CPU模拟器&#xff08;如Qiskit的Aer&#xff09;在n28…

spring mvc 异常处理中@RestControllerAdvice 和 @ControllerAdvice 对比详解

RestControllerAdvice 和 ControllerAdvice 对比详解 1. 基本概念 注解等效组合核心作用ControllerAdviceComponent RequestMapping&#xff08;隐式&#xff09;定义全局控制器增强类&#xff0c;处理跨控制器的异常、数据绑定或全局响应逻辑。RestControllerAdviceControll…

JavaScript的回调函数:异步编程的基石

引言 在JavaScript的世界里&#xff0c;回调函数是一种强大而基础的编程模式&#xff0c;它是异步编程的核心概念之一。随着Web应用程序变得越来越复杂&#xff0c;理解和掌握回调函数变得尤为重要。本文将深入探讨JavaScript回调函数的概念、应用场景以及最佳实践。 什么是回…