Frozen Silex
Static site generator built for Silex., (*1)
This is a proof of concept and may not work for you. Some known
issues include:, (*2)
- Generated sites only work at the root of the server.
- Generated sites can not be browsed without a server because URLs are
not rewritten to be relative.
Install
Require chh/frozen-silex
in your Silex Application's composer.json
., (*3)
Getting Started
Create a Freezer instance with your Silex\Application
object and call
its freeze
method:, (*4)
<?php
$freezer = new \FrozenSilex\Freezer(require('app.php'));
$freezer->freeze();
This will create a build
directory in your current working directory
with your application's controllers dumped as static HTML files., (*5)
Finding URLs
Frozen Silex works by looking at all your defined Routes in Silex's
routes
service, getting the URL for the name from the UrlGenerator and
then triggering a virtual request via the Symfony BrowserKit Component., (*6)
The following URLs can be found automatically:, (*7)
- Silex Routes which respond to
GET
requests.
- URLs generated by the
url_generator
service.
Pages which are not accessible via links generated by the
url_generator
can be made accessible by writing URL Generators., (*8)
URL Generators
URL Generators are callbacks which return an array of additional URLs
which the Freezer should trigger. URLs can be either a simple string
(which is then treated as URL) or a tuple of route name and params,
which is feeded through the URL Generator., (*9)
Example: If you've users which are not accessible through an Index page:, (*10)
<?php
$app->get('/users/{id}', function($id) { /* Code here */ })->bind('show_user');
$freezer = new \FrozenSilex\Freezer($app);
$freezer->registerGenerator(function() use ($app) {
$users = [];
foreach ($app['db']->users->find() as $user) {
$users[] = ['show_user', ['id' => (string) $user['_id']]];
}
return $users;
});
Configuration
The following configuration keys are used from the App instance:, (*11)
-
freezer.destination
(default: build
): Directory where static files are generated, defaults to build
in the current working directory.
-
freezer.override_url_generator
(default: true
): Overrides the
app's URL generator with a custom one, which freezes all generated
URLs.