public static function dispatch(Http_Scriptlet_Context $context_, Uri $uri_) { $params = $uri_->getPathParams(); $storeName = array_shift($params); $categoryName = array_shift($params); $file = Io::fileUpload(); $store = Media::store($storeName); $store->add($file, $file->getName(), $categoryName); // TODO JSON echo $store->uri($file->getName(), $categoryName); }
/** * @param \Components\Http_Scriptlet_Context $context_ * @param \Components\Uri $uri_ */ public static function dispatch(Http_Scriptlet_Context $context_, Uri $uri_) { $params = $uri_->getPathParams(); $base64 = end($params); $info = unserialize(\str\decodeBase64Url($base64)); $path = array_shift($info); $id = array_shift($info); $category = array_shift($info); $scheme = array_shift($info); $store = Media::store($path); $file = $store->findByScheme($scheme, $id, $category); header('Content-Length: ' . $file->getSize()->bytes()); readfile((string) $file); }
public static function dispatch(Http_Scriptlet_Context $context_, Uri $uri_) { if (!($method = $uri_->shiftPathParam())) { throw new Http_Exception('rest/resource', null, Http_Exception::NOT_FOUND); } $resource = get_called_class(); if (null === self::$m_methods || false === isset(self::$m_methods[$resource][$method])) { self::initializeMethods(); if (false === isset(self::$m_methods[$resource][$method])) { throw new Http_Exception('rest/resource', null, Http_Exception::NOT_FOUND); } } $method = self::$m_methods[$resource][$method]; if (false === isset($method['methods'][$context_->getRequest()->getMethod()])) { throw new Http_Exception('rest/resource', null, Http_Exception::NOT_FOUND); } if (isset($method['path']) && count($uri_->getPathParams()) < count($method['path'])) { throw new Http_Exception('rest/resource', null, Http_Exception::NOT_FOUND); } /* @var $resource \Components\Rest_Resource */ $resource = new $resource(); $resource->request = $context_->getRequest(); $resource->response = $context_->getResponse(); $params = []; if (isset($method['path']) || isset($method['query'])) { $marshaller = Object_Marshaller::forMimetype($resource->response->getMimetype()); foreach ($method['path'] as $name => $type) { $params[$name] = $marshaller->unmarshal($uri_->shiftPathParam(), $type); } if (isset($method['query'])) { foreach ($method['query'] as $name => $options) { if ($uri_->hasQueryParam($options['name'])) { $params[$name] = $marshaller->unmarshal($uri_->getQueryParam($options['name']), $options['type']); } else { if ($options['value']) { $params[$name] = $marshaller->unmarshal($options['value'], $options['type']); } else { $params[$name] = null; } } } } } if ($result = call_user_func_array([$resource, $method['name']], $params)) { echo $marshaller->marshal($result); } }
/** * @param \Components\Http_Scriptlet_Context $context_ * @param \Components\Uri $uri_ */ public static function dispatch(Http_Scriptlet_Context $context_, Uri $uri_) { if (__CLASS__ === get_called_class()) { $segments = $uri_->getPathParams(true); $count = count($segments); $params = []; for ($i = $count; 0 < $i; $i--) { $path = implode('/', $segments); foreach (self::$m_routes as $pattern => $scriptlet) { $matches = []; if (1 === preg_match($pattern, $path, $matches)) { $uri_->setPathParams($params); foreach ($segments as $segment) { $context_->getContextUri()->pushPathParam($segment); } $scriptlet::dispatch($context_, $uri_); return; } } array_unshift($params, array_pop($segments)); } if (null !== ($scriptlet = self::$m_default)) { $scriptlet::dispatch($context_, $uri_); return; } } else { $scriptlet = new static(); $scriptlet->request = $context_->getRequest(); $scriptlet->response = $context_->getResponse(); $method = $scriptlet->request->getMethod(); if (method_exists($scriptlet, strtolower($method))) { return $scriptlet->{$method}(); } } throw new Http_Exception('http/scriptlet', null, Http_Exception::NOT_FOUND); }