tp5.1中取消了系统常量的设置,很多模板公用的信息(网站标题、静态文件目录)无法通过以前的方式来渲染。本文主要介绍利用后置中间件去实现一些公用信息的渲染。
首先,我们配置好中间件,并注册一个后置中间件,具体介绍见[中间件 · ThinkPHP5.1完全开发手册 · 看云](https://www.kancloud.cn/manual/thinkphp5_1/564279)
我注册的后置中间件为`After`,代码如下:
```
namespace app\http\middleware;
class After
{
public function handle($request, \Closure $next)
{
$response = $next($request);
// 添加中间件执行代码
app('app\common\lib\AppConst');
return $response;
}
}
```
此处的`app\common\lib\AppConst`即我们自定义的一个执行公用信息渲染的类,代码如下
```
use app\common\model\AppConfig;
use think\facade\Cache;
use think\facade\View;
class AppConst
{
protected $defaultAssign = [];
public function __construct()
{
$this->getConfig();
$this->getActionConfig();
View::share($this->defaultAssign);
}
/**
* 获取应用基础配置,如网站名称、静态文件目录等
* @return $this
*/
protected function getConfig()
{
$config = Cache::remember('app_config',function(){
return AppConfig::defaultAssign()->select();
},0);
$configAssign = [];
foreach ($config as $value){
$configAssign['app_config'][$value['config_name']] = $value['config_value'];
}
$this->defaultAssign = array_merge($this->defaultAssign,$configAssign);
return $this;
}
protected function getActionConfig()
{
//获取当前请求action的信息
}
}
```
这样,我们就实现了通过后置中间件的方式自动渲染一些公用信息。这样的设计是不是既优雅又方便。