There is no license information available for the latest version (v1.0.0rc5) of this package.

URI routing for Hack with codegen

v1.0.0rc5 2017-09-28 17:39 UTC


Continuous Integration

Code generation for controller classes using the UriPattern system from hhvm/hack-router

This currently supports generating:

  • Request routing maps
  • Hack request routing classes for your site

For now, looking at the unit tests is the best way to learn how to use it.

Building a Request Router

use \Facebook\HackRouter\Codegen;

final class UpdateCodegen {
  public function main(): void {
        'controllerBase' => WebController::class,
        'router' => shape(
          'abstract' => false,
          'file' => __DIR__.'/../codegen/Router.php',
          'class' => 'Router',

This will generate a class called 'Router', complete with an automatically-generated route map, based on the URI patterns in your controllers.

WebController is the root controller for your site, and must implement Facebook\HackRouter\IncludeInUriMap, which in turn requires Facebook\HackRouter\HasUriPattern - for example:

public static function getUriPattern(): UriPattern {
  return (new UriPattern())
    ->enum(MyEnum::class, 'MyEnum');

Commit Your Codegen!

This is unusual advice, but it's the best approach for Hack code as you otherwise have a circular dependency:

  • HHVM will not execute hack code if there are references to undefined classes
  • Once you use the codegen, you reference the codegen classes
  • ... so you can't build them if you don't already have them


We welcome GitHub issues and pull requests - please see CONTRIBUTING.md for details.


hack-router-codegen is MIT-licensed.