Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/franzwilding/last

Zero Configuration, Static Site Generator for any Symfony project.
https://github.com/franzwilding/last

php ssg static-site-generator symfony

Last synced: about 1 month ago
JSON representation

Zero Configuration, Static Site Generator for any Symfony project.

Awesome Lists containing this project

README

        

# Last – static site generator for any Symfony project

[![Build Status](https://travis-ci.org/franzwilding/last.svg?branch=master)](https://travis-ci.org/franzwilding/last)
[![Test Coverage](https://api.codeclimate.com/v1/badges/e9334f9657fc4a65e24c/test_coverage)](https://codeclimate.com/github/franzwilding/last/test_coverage)

Last is a minimalistic static site generator for Symfony 4 applications. Once installed, Last provides a
command that will simply create requests for all of your routes and dumps the result as a static file to a dist folder.

## Installation
*(A symfony/flex recipe will be created soon. )*

composer require fw/last-bundle

Last should get registered automatically to config/bundles.php. If not, add it by hand:

...
Fw\LastBundle\FwLastBundle::class => ['all' => true],

## Usage
Now you can run the dump command and your Symfony app gets exported as static html files.

# will dump to the configured dist folder, defaults to %project%/dist
bin/console last:dump

# wil dump to the given folder
bin/console last:dump --dist=./custom_dist_folder

## Is it production ready?
Soon, however the following is missing yet:

- [ ] Test with more real life projects
- [ ] Provide an symfony/flex recipe
- [ ] Automatically copy assets from public/build, public/bundles/* and other locations to dist folder after dumping

## Configuration

fw_last:
dist_folder: '%kernel.project_dir%/dist' # this is the default dist folder, if you don't set it
providers:
static: true # Static provider is enabled per default, you can disable it here

## Request providers

Last runs requests against your kernel. So in order to make it work, all desired requests must be defined. To make
things more easy, Last comes with a request provider for all static routes (routes without mandatory placeholders). So
you only need to implement a custom request provider if you want to include dynamic routes like *blog/article/{id}*. A
simple provider could look like this:

use Fw\LastBundle\Router\RouteProvider;

class YourustomProvider implements RouteProvider
{
/**
* {@inheritdoc}
*/
public function getRoutes(): array
{
return [
Request::create('blog/article/1'),
Request::create('blog/article/2'),
Request::create('blog/article/3'),
];
}
}

And needs to be a tagged service, in order to make it visible for Last.

Your\CustomBundle\Provider\CustomProvider:
tags: ['fw.last.route_provider']

Of course you can inject any dependencies like an entity manager to create more advanced providers.

## Troubleshooting

### My links start with `http://localhost/` what should I do?
Use `{{ path() }}` instead of `{{ url() }}` in your templates to make your urls relative.