Modular Silex 
Built-ins features
- Twig/Bootstrap/Google analytics/…
 
- Doctrine Cache, DBAL, ORM
- BernardPHP message queue
- SF2 Console (make your command as service, name it as anything.command.the_name, then run php cli.php, you see your command is auto registered)
- Module system, check ./modules/system as example.
- Swagger UI, (*1)
Usage
Require atphp/atsilex in your project's composer.json file:, (*2)
{
  "name": "v3knet/website",
  "require": {
    "atphp/atsilex": "^0.2.0"
  },
  "scripts": {
    "post-install-cmd": [
      "atsilex\\module\\system\\commands\\InstallerScript::execute"
    ]
  },
  "extra": {
    "atsilex": {
      "%site_name%": "My Project",
      "%site_version%": "1.0-dev",
      "%site_url%": "http://www.vendor-name.com/",
      "%site_frontpage%": "hello",
      "%site_ga_code%": "UA-1234567-890",
      "%vendor_name%": "Vendor Name"
    }
  }
}
On composer install atsilex will setup default structure for for your application:, (*3)
files/                   # Directory to store temporary files (cache, compiled templates, …)
config.default.php       # (*) Default 
config.php               # The file that return configuration for application.
public/                  # Document root
      /index.php         # (*) Front controller
      /assets/modules/*  # Symlinks for modules's assets
                         # Don't edit (*), they will be overwritten in next composer install.
Write custom module
A module is basically a class which extends atsilex\module\Module. Each module can:, (*4)
- Define custom services
 
- Define new routes
- Define new commands
- Listen to system events, (*5)
Define a module is simple, you also need tell the application about your module — 
edit config.php, include your modules there:, (*6)
return [
    // …
    'modules' => [
        'my_module' => 'MyModule',
        'system'    => 'atsilex\module\system\SystemModule', # Can't disable
    ],
    // …
];
Default database for application is a SQLite file, it's auto created in files/app.db
when we run php public/index.php orm:schema-tool:create command., (*7)
To change default config for database connection, in config.php, add code similar to this:, (*8)
# SQlite
# $db_options = ['driver' => 'pdo_sqlite',  'path' => '/alternative/path/to/app.db'];
# MySQL
$db_options = [
    'driver'    => 'pdo_mysql',
    'host'      => 'mysql_write.someplace.tld',
    'dbname'    => 'my_database',
    'user'      => 'my_username',
    'password'  => 'my_password',
    'charset'   => 'utf8mb4',
];
return [
 // …
 'db.options' => $db_options,
 // …
];