一、如何开启Session
可以直接使用think\facade\Session类操作Session。
新版本不支持操作原生$SESSION数组和所有session开头的函数,只能通过Session类(或者助手函数)来操作。会话数据统一在当前请求结束的时候统一写入 所以不要在session写入操作之后执行exit等中断操作,否则会导致Session数据写入失败。
开启Session
Session功能默认是没有开启的(API应用通常不需要使用Session),如果你需要使用Seesion,需要在全局的中间件定义文件中加上下面的中间件定义:
'think\middleware\SessionInit'
如下图:
开启Session的位置
如果是多应用模式,并且你只是用于部分应用,那么也可以在应用中间件定义文件中单独开启。
二、安装验证码
安装好了框架,首次使用安装码需要安装think-captcha
composer require topthink/think-captcha
使用验证码库需要开启Session才能生效。
三、创建中间件
中间件主要用于拦截或过滤应用的HTTP请求,并进行必要的业务处理。
新版部分核心功能使用中间件处理,你可以灵活关闭。包括Session功能、请求缓存和多语言功能。
注册中间件
新版的中间件分为全局中间件、应用中间件(多应用模式下有效)、路由中间件以及控制器中间件四个组。执行顺序分别为:
全局中间件->应用中间件->路由中间件->控制器中间件
定义中间件
可以通过命令行指令快速生成中间件
php think make:middleware Check
这个指令会 app/middleware目录下面生成一个Check中间件。
注意:此创建中间件是全局中间件
所有的模块在进行访问时,都会经过此中间件。
前置/后置中间件
中间件是在请求具体的操作之前还是之后执行,完全取决于中间件的定义本身。
下面是一个前置行为的中间件
<?php
namespace app\middleware;
class Before
{
public function handle($request, \Closure $next)
{
// 添加中间件执行代码
return $next($request);
}
}
下面是一个后置行为的中间件
<?php
namespace app\middleware;
class After
{
public function handle($request, \Closure $next)
{
$response = $next($request);
// 添加中间件执行代码
return $response;
}
}
中间件方法同样也可以支持依赖注入。
来个比较实际的例子,我们需要判断当前浏览器环境是在微信或支付宝
namespace app\middleware;
/**
* 访问环境检查,是否是微信或支付宝等
*/
class InAppCheck
{
public function handle($request, \Closure $next)
{
if (preg_match('~micromessenger~i', $request->header('user-agent'))) {
$request->InApp = 'WeChat';
} else if (preg_match('~alipay~i', $request->header('user-agent'))) {
$request->InApp = 'Alipay';
}
return $next($request);
}
}
然后在你的移动版的应用里添加一个middleware.php文件
例如:/path/app/mobile/middleware.php
return [
app\middleware\InAppCheck::class,
];
然后在你的controller中可以通过request()->InApp获取相关的值
网友评论