装饰器模式是一种不改变代码本身而对其扩展各项功能的设计模式,它讲求的是附加功能对源代码的“无入侵感”,这也是面向切面编程AOP的思想。
laravel中有非常典型的应用,比如系统路由中间件(\app\Http\Kernel.php核心类文件中就添加了很多中间件和中间件组,中间件组是桥梁模式的一种体现),在请求到达控制器之前,可以使用中间件对其进行验证、加前缀,又可以对返回数据加一些code、设置成json、xml等格式。
例:一个自定义的\app\Admin\Middleware\CheckAdmin.php文件,用以在请求到达后台控制器方法前检测访问者身份的简单代码实现:
namespace App\Admin\Middleware;
use Closure;
use Illuminate\Support\Facades\Cache;
class CheckAdmin
{
/**
检验用户身份 只有管理员可以通过
* @param token
*/
public function handle($request, Closure $next)
{
if (! $request->token) {
return redirect()->route('login');
}
... ...
return $next($request);
}
}
又可以对返回数据进行封装,原理一样的。