[Laravel] 05 - Controller
大纲
PHP章节貌似有类似功能,回头看下。
请求 URL
一、URL 处理方法
请求使用的是:symfony/http-foundation组件
$_GET, $_POST, $_COOKIE, $_FILES, $_SERVER
[1] 在URL中,获取请求值
public function request1(Request $request) {
# (1) url中参数获取 $request ->input('name'); $request ->input('sex', '未知');
# (2) 判断有没有这个参数 if ($ request->has('name')) { echo $request->input('name'); } else { echo '无该参数'; }
# (3) 获取所有参数 $res = $request->all(); dd($res); }
[2] 在URL中,判断请求的类型
输入URL ----> 导向request1() ----> 判断自身的路由是否对
Route::any('student/request1', [uses' => 'StudentController@request1']);
------------------------------------------------------------------------
public function request1(Request $request) {
# (1) 是post? get? echo $request->method(); if ($request->isMethod('GET')) { echo 'Yes'; } else { echo 'No'; } # (2) 发送的是否是ajax request Res = $request->ajax(); var_dump($res); # (3) 是否是student控制器下的某个方法 # 有这个路由么? $request->is('student/*');
# (4) 获取当前URL
$request->url();
}
Session 处理
一、纵览
原生:没有框架的写法见 - [PHP] 05 - Cookie & Session
配置:config文件夹中的 session.php
启动:app/Http文件夹的 Kernel.php
加载:加上上述的“中间件” - 'web
二、Session的参数操作
实践:发送给服务器一个session带有参数,并在第二次session请求中成功取回参数。
[写法一]
[写法二]
session()->put('key2', 'value2'); echo session()->get('key2'); [写法三] Session::put('key3', 'value3'); echo Session::get('key3');
echo Session::get('key4', 'default'); # 没有取到的话,就取到一个替代的默认值
[写法四]
Session::put(['key4'] => 'value4']); # 以数组的形式存储数据
echo Session::get('key4', 'default');
放入多个,变为数组。
[写法五] Session::push('student', 'sean');
Session::push('student', 'imooc')
# student里有了两个items,变为了数组
$res = Session::get('student', 'default');
var_dump($res);
取完就删除session中的数据。
[写法六] Session::push('student', 'sean'); Session::push('student', 'imooc') # 不是读,而是直接取走;取第二次就没值了 $res = Session::pull('student', 'default'); var_dump($res);
获取所有的数据。
[写法七] $res = Session::all(); var_dump($res);
获取所有的数据。
[写法八]
if (Session::has('key')) {
$res = Session:all();
dd($res);
} else {
echo '你们老大不在‘;
}
删除数据。
[写法九]
# 1.删除指定的数据
Session::forget('key1');
$res = Session:all()
dd($res);
#2.清空session数据
Session::flush();
只有第一次存在,之后就没了。
[写法十] Session::flash('key-flash', 'val-flash');
echo Session::get('key-flash');
响应处理
一、Response 响应
路由:
Route::any('response', [uses' => 'StudentController@response']);
响应:【以json的格式】
二、重定向
- 不带参数
在response()中:
return redirect('session2');
类似于:goto 到了seesion2的“路由映射的函数”。
- 带参数
[写法一]
在response()中:
return redirect('session2')->with('message', '我是快闪数据');
session2中提取参数;默认参数是:’暂无信息‘。
[写法二]
return redirect()->action('StudentController@section2')->with('message', '我是快闪数据'); [写法三] return redirect()->route(<别名>)->with('message', '我是快闪数据');
- 返回上一个页面
return redirect()->back();
中间件
一、大纲
二、定义中间件
- 路由
Route::any('activity0', [uses' => 'StudentController@activity0']); Route::any('activity1', [uses' => 'StudentController@activity1']); Route::any('activity2', [uses' => 'StudentController@activity2']);
- 中间件
[1] 创建
[create app/Http/Middleware/Activity.php]
next 是个函数;Closure是一种类型;
【前置操作,因为在请求前设置的逻辑】
以下是后置操作的例子
[2] 注册
app/Http/Kernel.php
可见,中间件就是个“类”。
[3] 使用
活动页面需要中间件的验证,时间到了才能可用!没到,则跳转到宣传页面。
[4] 访问
public function activity0(){ return '活动就要开始'; } public function activity1() { return '活动进行中'; } public function activity2() { return '活动进行中'; }