Documentation | Github | Installation


A multitier nestful route oriented PHP microframework, shipped with a flexibility that let you design, plan and prototype your application and execution hierarchically through the map of routing.

What's Exedra?

Nestful Routing
Write a routing beneath another route. Hierarchically design your application based on a nestable/groupable level of routing.
Route Oriented
From writing how your application may behave, to querying back the route for url generation, to hierarchically design your application, to binding your middleware on any node of your route.
Adaptive and flexible
Write and use your own handler, design your own routing component(s). Or customize your very own application structure.
Near-zero convention and configuration
There're still a configuration, and convention. But too little are required just to have your application running.
It's fast. Designed with minimum architecture in mind, without sacrificing the extensibility very much.
Codes live in their context. Nothing is outworldy unless specified.

Sneak peak

Default routing

  'person' => array(
      'method' => 'any',
      'path' => '/persons',
      'subroutes' => array(
        'list' => array(
            'method' => 'get',
            'path' => '/',
            'execute' => function() {}
Convenient Routing

    ->execute(function() {



URL Generator

// absolute route
echo $context->url->route('@person.list');

// search tagged route
echo $context->url->route('#bookList');
Creating a view

$view = $context->view->create('book/list');

$view->set('title', 'List of books');
$view->set('authors', $authors);

echo $view->render();

echo $context->form->text('bookTitle')

echo $context->form->select('gender')
      ->setOptions(array('male', 'female'));
Path handling

$file = $context->path->file('Logs/message.log');

// get contents
$contents = $file->getContents();

// put contents
$file->putContents('message from mars');

// dot notation based session
$context->session->set('facebook.token', $token);
$context->session->set('facebook.perms', $perms);

// array of token, permissions
$facebookData = $context->session->get('facebook');

// delete array of 'facebook' session data