Laravel表单篇-Request、Session、Response、Middleware
{ { $students->render() }}@stop
@stop
发布日期:2021-07-01 06:08:24
浏览次数:3
分类:技术文章
本文共 12874 字,大约阅读时间需要 42 分钟。
Laravel-表单篇
第1章 Controller 介绍
1、Request
2、Session 3、Response 4、Middleware1、Request
Laravel请求使用的组件是symfony/http-foundatio
请求中存放了$_GET $_POST$_COOKIE$_FILES$_SERVER
获取请求中的值
判断请求类型/** * 请求url * http://127.0.0.1:8000/student/list?name=Tom */// 取值$request->input('name');// Tom// 取值,设置默认值$request->input('age', 'default');// default// 判断是否有值$request->has('name');// true// 取出所有参数$request->all();// { ["name"]=> "Tom" }// 获取请求类型$request->method();// GET// 判断请求类型$request->isMethod('GET');// true// 判断是否为ajax请求$request->ajax();// false// 判断路由格式$request->is('student/*');// true// 获取当前url$request->url();// http://127.0.0.1:8000/student/list
2、Session
HTTP协议无状态 Stateless
Session提供一种保存用户数据的方法支持多种session后端驱动:
Memcached、Redis、数据库默认使用file的Session驱动
配置文件:config/session.php启用Session中间件
Route::group(['middleware'=>['web']], function (){ Route::get('student/list', 'StudentController@list');});
使用方式
1、Request类session()方法 2、session()辅助函数 3、Session facade使用示例
// 1、HTTP request$request->session()->put('key', 'value');$request->session()->get('key');// 2、session()session()->put('key', 'value');session()->get('key');// 3、SessionSession::put('key', 'value');Session::get('key', 'default');// 以数组的形式存储Session::put(['key' => 'value']);// 放到Session数组中Session::push('key', 'value1');Session::push('key', 'value2');// 从Session中取数据,取出就删除Session::pull('key', 'value');// 取出所有值Session::all();// 判断存在Session::has('key');// 删除指定key的值Session::forget('key');// 清空Session::flush();// 暂存数据,第一次访问的时候存在Session::flash('key', 'value');
3、Response
常见响应类型:
1、字符串 2、视图 3、Json 4、重定向// json$data = [ 'code': 0, 'data': ['name' => 'Tom'], 'msg': 'ok',];return response()->json($data);// 重定向,Route::get('student/list', [ 'as' => 'list', 'uses' =>'StudentController@list']);return redirect('student/list');// 携带Session快闪数据return redirect('student/list')->with('key', 'value');// actionreturn redirect()-action('StudentController@list');// routereturn redirect()-route('list');// 返回上一页面return redirect()-back();
4、Middleware
Laravel中间件提供一个方便的机制来过滤进入应用程序的HTTP请求
步骤:
新建中间件 注册中间件 使用中间件 中间件的前置和后置操作使用示例
需求: 活动开始前只能访问活动的-介绍页 活动开始后可以访问活动的-活动页1、新建中间件
app/Http/Middleware/Active.phpnamespace App\Http\Middleware;use Closure;class Active{ public function handle($request, Closure $next) { if (time() < strtotime('2019-11-01')) { return redirect('student/index'); } else{ return $next($request); } }}
2、注册中间件
app/Http/Kernel.phpnamespace App\Http;use Illuminate\Foundation\Http\Kernel as HttpKernel;class Kernel extends HttpKernel{ protected $routeMiddleware = [ 'active' => \App\Http\Middleware\Active::class, ];}
3、使用中间件
app/Http/Controllers/StudentController.phpnamespace App\Http\Controllers;use Illuminate\Http\Request;class StudentController extends Controller{ function list(Request $request) { return '活动页'; } function index(Request $request) { return '介绍页'; }}
routes/web.php
// 活动开始前可以访问活动首页Route::get('student/index', 'StudentController@index');// 活动开始后才能访问活动列表页Route::group(['middleware'=>['active']], function (){ Route::get('student/list', 'StudentController@list');});
前置操作:请求执行前
后置操作:请求执行后namespace App\Http\Middleware;use Closure;class Active{ // 前置操作 public function handleBefore($request, Closure $next) { if (time() < strtotime('2019-11-01')) { return redirect('student/index'); } else{ return $next($request); } } // 后置操作 public function handleAfter($request, Closure $next) { $response = $next($request); echo '后置操作'; return $response; }}
第2章 Laravel表单
1、静态资源管理及模板布局
2、表单列表及分页实现 3、通过表单实现新增及操作状态提示功能 4、表单验证及数据保持详解 5、通过模型处理性别 6、通过表单实现修改 7、表单中查看详情及删除完整代码
1、配置数据库 .envDB_CONNECTION=mysqlDB_HOST=127.0.0.1DB_PORT=3306DB_DATABASE=dataDB_USERNAME=rootDB_PASSWORD=123456
2、配置路由
routes/web.phpRoute::get('/', [ 'uses'=> 'StudentController@index']);Route::any('create', [ 'uses'=> 'StudentController@create']);Route::post('save', [ 'uses'=> 'StudentController@save']);Route::any('update/{id}', [ 'uses'=> 'StudentController@update']);Route::any('detail/{id}', [ 'uses'=> 'StudentController@detail']);Route::any('delete/{id}', [ 'uses'=> 'StudentController@delete']);
3、Model
app/Student.phpnamespace App;use Illuminate\Database\Eloquent\Model;class Student extends Model{ // 定义常量 const SEX_NULL = 0; const SEX_BOY = 1; const SEX_GIRL = 2; // 指定表名 protected $table = 'student'; // 指定主键 protected $primaryKey = 'id'; // 自动维护时间戳字段 public $timestamps = true; // 指定允许批量赋值的字段 protected $fillable = ['name', 'age', 'sex']; // 自定义保存时间戳格式 public function getDateFormat() { return time(); } // 解决 Call to a member function format() on string public function fromDateTime($val) { return empty($val) ? $val : $this->getDateFormat(); } // 不自动格式化时间戳 protected function asDateTime($value) { return $value; } public function getSex($key = null) { $arr = [ self::SEX_NULL => '未知', self::SEX_BOY => '男', self::SEX_GIRL => '女', ]; if ($key !== null) { return array_key_exists($key, $arr) ? $arr[$key] : $arr[self::SEX_NULL]; } else { return $arr; } }}
5、控制器
app/Http/Controllers/StudentController.phpnamespace App\Http\Controllers;use App\Student;use Illuminate\Http\Request;class StudentController extends Controller{ function index(Request $request) { // 分页每页数量 $students = Student::paginate(20); return view('student/index', ['students' => $students] ); } function create(Request $request) { if ($request->isMethod('POST')) { // 数据验证 // 1、控制器验证 // 通过会继续执行 // 未通过会重定向到上一页面,抛出异常,错误信息存储到Session // $this->validate($request, [ // 'Student.name' => 'required|min:2|max:20', // 'Student.age' => 'required|integer', // 'Student.sex' => 'required|integer', // ], [ // 'required' => ':attribute 为必填项', // 占位符 // 'integer' => ':attribute 必须为整数', // 'min' => ':attribute 长度不符合要求', // ], [ // 'Student.name' => '姓名', // 'Student.age' => '年龄', // 'Student.sex' => '性别', // ]); // 2、Validator验证 $validator = \Validator::make($request->input(), [ 'Student.name' => 'required|min:2|max:20', 'Student.age' => 'required|integer', 'Student.sex' => 'required|integer', ], [ 'required' => ':attribute 为必填项', // 占位符 'integer' => ':attribute 必须为整数', 'min' => ':attribute 长度不符合要求', ], [ 'Student.name' => '姓名', 'Student.age' => '年龄', 'Student.sex' => '性别', ] ); if ($validator->fails()) { // 数据保持 return redirect()->back()->withErrors($validator)->withInput(); } $data = $request->input('Student'); // 需要设置模型批量赋值字段 if (Student::create($data)) { return redirect('/')->with('success', '添加成功'); } else { return redirect()->back(); } } else { $student = new Student(); return view('student/create', [ 'student' => $student ]); } } function save(Request $request) { $data = $request->input('Student'); var_dump($data); $student = new Student(); $student->name = $data['name']; $student->age = $data['age']; $student->sex = $data['sex']; if ($student->save()) { return redirect('/'); } else { return redirect()->back(); } } function update(Request $request, $id) { $student = Student::find($id); if ($request->isMethod('POST')) { $data = $request->input('Student'); $student->name = $data['name']; $student->age = $data['age']; $student->sex = $data['sex']; if ($student->save()) { return redirect('/')->with('success', '修改成功-' . $id); } } else { return view('student/create', [ 'student' => $student ]); } } function detail(Request $request, $id) { $student = Student::find($id); return view('student/detail', [ 'student' => $student ]); } function delete(Request $request, $id) { $student = Student::find($id); if($student->delete()){ return redirect('/')->with('success', '删除成功-' . $id); } }}
6、视图
(1)公共布局 resources/views/common/layouts.blade.phpDocument - @yield('title') @section('header')@show @section('footer')学生管理
@2019@show
(2)消息组件
resources/views/common/message.blade.php@if(Session::has('success')) { { Session::get('success')}} @endif @if(count($errors)){
{ $errors->first()}} @endif{ { -- @if(count($errors))--}}{ { -- @foreach($errors->all() as $error)--}}{ { --{
{ $error}}--}}{ { -- @endforeach--}}{ { -- @endif--}}
(3)首页
resources/views/student/index.blade.php@extends('common/layouts')@section('right')
序号 | 姓名 | 年龄 | 性别 | 创建日期 | 修改日期 | 操作 |
---|---|---|---|---|---|---|
{ { $student->id}} | { { $student->name}} | { { $student->age}} | { { $student->getSex($student->sex)}} | { { date('Y-m-d', $student->created_at)}} | { { date('Y-m-d', $student->updated_at)}} | 修改 详情 删除 |
(4)详情页
resources/views/student/detail.blade.php@extends('common/layouts')@section('right')
id | { { $student->id}} |
---|---|
姓名 | { { $student->name}} |
年龄 | { { $student->age}} |
性别 | { { $student->getSex($student->sex)}} |
添加日期 | { { date('Y-m-d', $student->created_at)}} |
修改日期 | { { date('Y-m-d', $student->updated_at)}} |
(5)编辑页
resources/views/student/create.blade.php@extends('common/layouts')@section('right')@stop
(6)css文件
public/css/index.scssbody { width: 600px; margin: 0 auto; text-align: center;}.main { display: flex; width: 100%; .container { border: 1px solid #DDDDDD; a { text-decoration: none; padding: 3px 5px; &:link, &:visited { color: #1b1e21; } &:active { color: #1b1e21; } &:hover, &.active{ color: #FFFFFF; background-color: #DDDDDD; } } .form{ .error{ color: red; font-size: 12px; } } } .pagination { ul, li { list-style: none; } display: flex; li { background-color: #DDDDDD; color: #FFFFFF; padding: 3px 5px; margin: 0 5px; } }}
第3张 总结
Request
Response Session Middleware最终效果
1、首页 2、编辑页 3、详情页转载地址:https://pengshiyu.blog.csdn.net/article/details/103336657 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月27日 05时42分58秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
微信硬件平台(一) 公众号 ESP8266 Arduino LED
2019-05-08
esp8266驱动液晶屏
2019-05-08
PHP 3 运算符 if...else...elseif 语句
2019-05-08
PHP 5 全局变量 - 超全局变量
2019-05-08
PHP 2 语句 数据类型 字符串函数 常量
2019-05-08
(实例1) TFT2.0液晶屏幕测试 mega2560
2019-05-08
PHP 3 函数
2019-05-08
TFT1.44显示屏
2019-05-08
Arduino 操作OLED
2019-05-08
TFT2.2
2019-05-08
微信硬件(三)
2019-05-08
微信硬件平台(六) 设备直连微信云
2019-05-08
微信硬件(四)调试工具
2019-05-08
微信学习资料
2019-05-08
PHP交互数据库
2019-05-08
微信硬件平台(0) 流程介绍
2019-05-08
微信硬件平台(七) 设备控制控制面板-网页sokect-mqtt长连接
2019-05-08