示例#1
0
 /**
  * @return bool
  */
 public function save() : bool
 {
     if (!self::$init) {
         return true;
     }
     $this->accessTime = time();
     if (!$this->startTime) {
         $this->startTime = $this->accessTime;
     }
     $ttl = DI::config()->getIfExists('session/refreshTtl') ?? 60;
     if (!$this->changed && $this->accessTime + $ttl < time()) {
         $event = new TimerEvent('session.touch');
         $return = $this->storage->touch($this->id, $this->data, $this->startTime, $this->accessTime);
     } else {
         $event = new TimerEvent('session.write');
         $return = $this->storage->write($this->id, $this->data, $this->startTime, $this->accessTime);
     }
     $event->setData(['length' => $return]);
     self::emit($event);
     return $return === false ? false : true;
 }
示例#2
0
文件: Router.php 项目: cawaphp/cawa
 /**
  * @param Route $route
  * @param array $args
  *
  * @return string|array|\SimpleXMLElement
  */
 private function callController(Route $route, array $args)
 {
     $callback = $route->getController();
     $this->currentRoute = $route;
     // route args
     $args = array_merge($route->getArgs(), $args);
     $this->args = $args;
     // simple function
     if (is_callable($callback) && is_object($callback)) {
         return call_user_func_array($callback, [$args]);
     }
     // controller
     preg_match('`([A-Za-z_0-9\\\\<>]+)(?:::)?([A-Za-z_0-9_<>]+)?`', $callback, $find);
     $class = $this->replaceDynamicArgs($find[1], $route, $args);
     $method = isset($find[2]) ? $this->replaceDynamicArgs($find[2], $route, $args) : null;
     // replace class dynamic args
     if (!class_exists($class)) {
         throw new \BadMethodCallException(sprintf("Can't load class '%s' on route '%s'", $class, $route->getName()));
     }
     $controller = new $class();
     if (is_null($method)) {
         $method = 'get';
         if (self::request()->isAjax() && method_exists($controller, 'ajax')) {
             $method = 'ajax';
         } elseif (self::request()->getMethod() == 'POST' && method_exists($controller, 'post')) {
             $method = 'post';
         }
     }
     $ordererArgs = $this->mapArguments($controller, $method, $args);
     $event = new TimerEvent('router.mainController');
     $event->setData(['controller' => $class, 'method' => $method, 'data' => $ordererArgs]);
     $return = null;
     if (method_exists($controller, 'init')) {
         $return = call_user_func_array([$controller, 'init'], $ordererArgs);
     }
     if (is_null($return)) {
         $return = call_user_func_array([$controller, $method], $ordererArgs);
     }
     self::emit($event);
     return $return;
 }