拦截器

拦截器是Saber的一个非常强大的特性, 它可以让你非常方便地处理各种事情, 比如打印dev日志:

  1. SaberGM::get('http://twosee.cn/', [
  2. 'before' => function (Saber\Request $request) {
  3. $uri = $request->getUri();
  4. echo "log: request $uri now...\n";
  5. },
  6. 'after' => function (Saber\Response $response) {
  7. if ($response->success) {
  8. echo "log: success!\n";
  9. } else {
  10. echo "log: failed\n";
  11. }
  12. echo "use {$response->time}s";
  13. }
  14. ]);
  15. // log: request http://twosee.cn/ now...
  16. // log: success!
  17. // use 0.52036285400391s

甚至连异常自定义处理函数,会话都是通过拦截器来实现的.

拦截器可以有多个, 会依照注册顺序执行, 并且你可以为拦截器命名, 只需要使用数组包裹并指定key值, 如果你要删除这个拦截器, 给它覆盖一个null值即可.

  1. [
  2. 'after' => [
  3. 'interceptor_new' => function(){},
  4. 'interceptor_old' => null
  5. ]
  6. ]

拦截器可以使用四种方式注册(4种PHP回调函数):

  1. callable: function(){}
  2. string: 'function_name'
  3. string: 'ClassName::method_name'
  4. array: [$object, 'method_name']