/** * @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; }
/** * @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; }