1. Controller
- Request
- Session
- Response
- Middleware
2. Request
Laravel中的请求使用的是symfony/http-doundation组件
Request中存放了:
- $_GET
- $_POST
- $_COOKIE
- $_FILES
- $_SERVER
代码如下:
注意:需要引入 use Illuminate\HTTP\Request;
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use Illuminate\HTTP\Request; // 在使用Request的时候要用
use App\Student;
class StudentController extends Controller
{
public function request1(Request $request)
{
// 1. 取值
//获取一个request中的值
echo $request->input('name');
// 获取sex的值,如果sex不存在,则显示默认值“未知”
echo $request->input('sex', '未知');
// 判断是否有参数
if($request->input('name')){
echo '<p>' . $request->input('name') . '</p>';
} else{
echo '<p>不存在</p>';
}
//获取所有的参数
$res = $request->all();
dd($res);
// 2. 判断请求类型
// 判断请求类型
echo $request->method();
// 判断是否是POST请求
if($request->isMethod('POST')){
echo 'YES';
}
else{
echo 'NO';
}
// 是否ajax请求
$res = $request->ajax();
var_dump($res);
// 请求路径是否符合特定格式,是否是从student下的某个方法
$res = $request->is('student/*');
var_dump($res);
// 显示请求的路径
echo $request->url();
}
}
TODO:从Form中获取数据
3. Session
3.1. Session简介
- session提供一种保存用户数据的方法
- laravel支出多种session后端驱动:
- Memcached
- Redis
- Database
- file(默认)
- Session配置文件位于config/session.php中
延伸阅读:Redis
3.2. 三种使用Session的方法:
- HTTP request类的session()
- session()辅助函数
- Session facade类(需要添加
use Illuminate\Support\Facades\Session;
来引入)
3.3. 设置Session
- 打开
config/session.php
- 主要要设置的内容:
<?php
// 采用的session实现方式
'driver' => env('SESSION_DRIVER', 'file'),
// 超时时间,单位是分钟
'lifetime' => 120,
// 关闭浏览器时就Session失效
'expire_on_close' => false,
3.4. 存取Session
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use Illuminate\HTTP\Request; // 在使用Request的时候要用
use Illuminate\Support\Facades\Session; // 在使用Facades的Session类来使用Session的时候要用
use App\Student;
class StudentController extends Controller
{
public function session1(Request $request)
{
// 1. HTTP request session();
$request->session()->put('k1', ['name' => 'Martin']);
$res = $request->session()->get('k1');
var_dump($res);
// 2. session()
session()->put('k2', 'v2');
$res = session()->get('k2');
var_dump($res);
// 3. Sesssion类
Session::put('k3', 'v3');
echo Session::get('k3');
// 如果Session的key不存在,显示默认值
echo Session::get('k4', 'default');
Session::put(['k4' => 'v4']);
echo Session::get('k4', 'default');
// 把数据放到Session的数组中
Session::push('student', 'Martin');
Session::push('student', 'Miffy');
Session::push('student', 'Rebecca');
$res = Session::get('student');
var_dump($res);
// pull起的作用和get类似,但是只显示1次,显示后会删除
$res = Session::pull('student', 'default');
var_dump($res);
// 取出所有的值
$res = Session::all();
var_dump($res);
// 判断Session中是否有这个Key
if (Session::has('student')) {
$res = Session::all();
echo 'Here<br />';
var_dump($res);
} else {
echo 'No key = k1';
}
// 删除一个key
$res = Session::all();
var_dump($res);
Session::forget('student');
$res = Session::all();
var_dump($res);
// 清空所有
Session::flush();
$res = Session::all();
var_dump($res);
// flash,不知道为什么这个有的时候会失败
// 环境是用file保存session
$request->session()->flash('key1', 'value2');
echo $request->session()->get('key1', 'default');
}
}
* Session::flash
有坑!*
3. Response
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use Illuminate\HTTP\Request; // 在使用Request的时候要用
use Illuminate\Support\Facades\Session; // 在使用Facades的Session类来使用Session的时候要用
use Illuminate\Contracts\Routing\ResponseFactory; // 在用Response时需要
use App\Student;
class StudentController extends Controller
{
public function response1()
{
$data = [
'errCode' => 0,
'errMsg' => 'success',
'data' => [
'name' => 'Martin',
'age' => 22
]
];
// 3. 响应json
return response()->json($data);
// 4. 重定向
return redirect('redirect1')->with('message', '我是flashdata');
return redirect()->action('StudentController@redirect1');
return redirect()->route('redirect1');
return redirect()->back(); // 返回上一个页面
}
}
4. Middleware
4.1. 中间件的作用
Laravel中间件提供一个方便的机制来过滤进入应用程序的 HTTP 请求。
4.2. 场景应用
- 新建中间件
- 注册中间件
- 使用中间件
中间件的前置和后置操作
- 新建中间件
中间件位于
Http/Middleware
目录下<?php namespace App\Http\Middleware; use Closure; class Activity { public function handle($request, $next) { if(time() < strtotime('2017-03-21')){ return redirect('activity0'); } return $next($request); } }
- 注册中间件
在
app/Http/Kernel.php
中,添加:<?php namespace App\Http; use Illuminate\Foundation\Http\Kernel as HttpKernel; class Kernel extends HttpKernel { // 省略了部分代码... protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'activity' => \App\Http\Middleware\Activity::class, ]; }
使用中间件
中间件的前置和后置操作
逻辑在请求执行前,则是中间件前置操作
逻辑在请求执行后,则是中间件前置操作