<?php require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'Bootstrap.php'; use Hoa\Dispatcher; use Hoa\File; use Hoa\Mime; use Hoa\Router; $router = new Router\Http(); $router->any('a', '.*', function (Dispatcher\Kit $_this) { $uri = $_this->router->getURI(); $file = __DIR__ . DS . $uri; if (!empty($uri) && true === file_exists($file)) { $stream = new File\Read($file); try { $mime = new Mime($stream); $_mime = $mime->getMime(); } catch (Mime\Exception $e) { $_mime = 'text/plain'; } header('Content-Type: ' . $_mime); echo $stream->readAll(); return; } require 'index.php'; }); $dispatcher = new Dispatcher\Basic(); $dispatcher->dispatch($router);
$groupId = getmygid(); require SABRE_KATANA_PREFIX . '/resource/view/install_permissions.html'; return; } } $url = $request->getUrl(); $query = ''; /** * We compute asynchronous tasks from the installation page. * They have the following form: install?/<command> * * Else, we print the installation page. */ if (false !== ($pos = strpos($url, '?'))) { $response->addHeader('Content-Type', 'application/json'); $router = new Router\Http(); $router->post('baseurl', '/(?-i)baseurl', function () use($request, $response) { $response->setBody(json_encode(Installer::checkBaseUrl($request->getBodyAsString()))); HTTP\Sapi::sendResponse($response); })->post('password', '/(?-i)password', function () use($request, $response) { $response->setBody(json_encode(Installer::checkPassword($request->getBodyAsString()))); HTTP\Sapi::sendResponse($response); })->post('email', '/(?-i)email', function () use($request, $response) { $response->setBody(json_encode(Installer::checkEmail($request->getBodyAsString()))); HTTP\Sapi::sendResponse($response); })->post('database', '/(?-i)database', function () use($request, $response) { $payload = json_decode($request->getBodyAsString(), true); $out = false; if (is_array($payload)) { try { $out = Installer::checkDatabase($payload);
<?php require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'Bootstrap.php'; use Hoa\Exception; use Hoa\Dispatcher; use Hoa\Router; Exception\Error::enableErrorHandler(); Exception\Idle::enableUncaughtHandler(); $dispatcher = new Dispatcher\ClassMethod(['synchronous.call' => 'Application\\Resource\\(:call:U:)', 'synchronous.able' => '(:%variables._method:U:)', 'asynchronous.call' => '(:%synchronous.call:)', 'asynchronous.able' => '(:%synchronous.able:)']); $router = new Router\Http(); $router->_get('_resource', '/Static/(?<resource>)')->get('dates', '/api/dates(?:/(?<limit>\\d+))?', 'Dates')->get('discography', '/api/discography', 'Discography')->get('album', '/api/album/(?<albumId>.+)', 'Album')->get('videos', '/api/videos', 'Videos')->get('fallback', '/.*', 'Fallback'); $dispatcher->dispatch($router);
/** * Interprete a stream as XYL. * * @param \Hoa\Stream\IStream\In $in Stream to interprete * as XYL. * @param \Hoa\Stream\IStream\Out $out Stream for rendering. * @param \Hoa\Xyl\Interpreter $interpreter Interpreter. * @param \Hoa\Router\Http $router Router. * @param mixed $entityResolver Entity resolver. * @param array $parameters Parameters. * @return void * @throws \Hoa\Xyl\Exception * @throws \Hoa\Xml\Exception * @throws \Hoa\Xml\Exception\NamespaceMissing */ public function __construct(Stream\IStream\In $in, Stream\IStream\Out $out, Interpreter $interpreter, Router\Http $router = null, $entityResolver = null, array $parameters = []) { parent::__construct('\\Hoa\\Xyl\\Element\\Basic', $in, true, $entityResolver); if (false === $this->namespaceExists(self::NAMESPACE_ID)) { throw new Exception('The XYL file %s has no XYL namespace (%s) declared.', 0, [$in->getStreamName(), self::NAMESPACE_ID]); } if (null === self::$_parameters) { self::$_parameters = new Core\Parameter($this, ['theme' => 'classic'], ['theme' => '(:theme:lU:)']); $this->getParameters()->setParameters($parameters); } $this->_i = self::$_ci++; $this->_data = new Core\Data(); $this->_out = $out; $this->_interpreter = $interpreter; $this->_router = $router; $this->_mowgli = $this->getStream()->readDOM()->ownerDocument; switch (strtolower($this->getName())) { case 'document': $this->_type = self::TYPE_DOCUMENT; break; case 'definition': $this->_type = self::TYPE_DEFINITION; break; case 'overlay': $this->_type = self::TYPE_OVERLAY; break; case 'fragment': $this->_type = self::TYPE_FRAGMENT; break; default: throw new Exception('Unknown document <%s>.', 1, $this->getName()); } $this->useNamespace(self::NAMESPACE_ID); $protocol = Core::getInstance()->getProtocol(); $protocol['Library'][] = new _Protocol('Xyl[' . $this->_i . ']', 'Xyl' . DS . 'Interpreter' . DS . $this->_interpreter->getResourcePath()); if (null !== $router && false === $router->ruleExists('_resource')) { $router->_get('_resource', '/(?<theme>)/(?<resource>)'); } return; }
// Fichier de config require_once 'config.php'; // Le script va afficher du français if (PHP_OS == 'Linux') { setlocale(LC_ALL, 'fr_FR.UTF-8'); } else { setlocale(LC_ALL, 'French'); } // Déclaration des NS utilisés use Hoa\Core; use Hoa\Dispatcher; use Hoa\Router; // Activation des erreurs Core::enableErrorHandler(); Core::enableExceptionHandler(); // Mise en place du dispatcher $dispatcher = new Dispatcher\ClassMethod(['synchronous.call' => 'Application\\Controller\\(:call:U:)', 'asynchronous.able' => '(:%synchronous.able:)']); // Connection à la base de donnée Hoa\Database\Dal::initializeParameters(array('connection.list.default.dal' => Hoa\Database\Dal::PDO, 'connection.list.default.dsn' => SQL_DNS, 'connection.list.default.username' => SQL_USER, 'connection.list.default.password' => SQL_PWD, 'connection.list.default.options' => array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"), 'connection.autoload' => 'default')); // Utilisation d'un Kit personnalisé $dispatcher->setKitName('Application\\Dispatcher\\Kit'); $router = new Router\Http(); // Déclaration des routes $router->get('Home', '/', 'Index', 'Index')->post('Login', '/', 'Index', 'Login')->get('Logout', '/Logout', 'Index', 'Logout'); // Here we go ! try { $dispatcher->dispatch($router); } catch (Hoa\Dispatcher\Exception $e) { echo $e->getMessage(); //echo 'Page Introuvable'; }
protected function _unroute($id, $pattern, array $variables, $allowEmpty = true) { $variables = array_map('rawurlencode', $variables); return parent::_unroute($id, $pattern, $variables, $allowEmpty); }
<?php use Hoa\Router; $router = new Router\Http(); $router->get('home', '/')->get('page', '/(?<pathname>[\\w\\d\\-_]+)')->get('post', '/p/(?<pathname>[\\w\\d\\-_]+)')->_get('_resource', '/(?<resource>)'); return $router;
<?php use Hoa\Router; $router = new Router\Http(); $router->get('c', '(?<vendor>)/(?<chapter>)\\.html')->get('hack', '(?<chapter>)\\.html')->get('full', '/(?<vendor>)/(?<chapter>)\\.html')->_get('literature', 'http://hoa-project.net/Literature\\.html')->_get('learn', 'http://hoa-project.net/Literature/Learn/(?<chapter>)\\.html')->get('_resource', 'http://static.hoa-project.net/(?<resource>)')->_get('central_resource', 'http://central.hoa-project.net/Resource/(?<path>)')->_get('board', 'https://waffle.io/hoaproject/(?<repository>)')->_get('git', 'http://git.hoa-project.net/(?<repository>).git/')->_get('github', 'https://github.com/hoaproject/(?<repository>)')->_get('research', 'http://hoa-project.net/Literature/Research/(?<article>[\\w\\d]+)\\.pdf', 'Literature\\Research')->_get('event', 'http://hoa-project.net/Event/(?<event>\\w+)\\.html', 'Generic')->_get('keynote', 'http://keynote.hoa-project.net/(?<keynote>)');