tp5.1中取消了系統常量的設置,很多模板公用的信息(網站標題、靜態文件目錄)無法通過以前的方式來渲染。本文主要介紹利用后置中間件去實現一些公用信息的渲染。
首先,我們配置好中間件,并注冊一個后置中間件,具體介紹見[中間件 · ThinkPHP5.1完全開發手冊 · 看云](http://www.hmoore.net/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的信息
}
}
```
這樣,我們就實現了通過后置中間件的方式自動渲染一些公用信息。這樣的設計是不是既優雅又方便。