1、Request 2、Session 3、Response 4、Middleware
1、RequestLaravel请求使用的组件是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、Session
Session::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');
// action
return redirect()-action('StudentController@list');
// route
return redirect()-route('list');
// 返回上一页面
return redirect()-back();
4、Middleware
Laravel中间件提供一个方便的机制来过滤进入应用程序的HTTP请求
步骤: 新建中间件 注册中间件 使用中间件 中间件的前置和后置操作
使用示例 需求: 活动开始前只能访问活动的-介绍页 活动开始后可以访问活动的-活动页
1、新建中间件 app/Http/Middleware/Active.php
namespace App\Http\Middleware;
use Closure;
class Active
{
public function handle($request, Closure $next)
{
if (time() \App\Http\Middleware\Active::class,
];
}
3、使用中间件 app/Http/Controllers/StudentController.php
namespace 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() '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.php
namespace 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.php
namespace 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.php
Document - @yield('title')
@section('header')
学生管理
@show
@section('left')
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?