MicroSymfony
MicroSymfony copied to clipboard
Template introduction, check out: https://www.strangebuzz.com/en/blog/introducing-the-microsymfony-application-template
MicroSymfony 🎶
Introduction 🖋
MicroSymfony is a Symfony 7.1 application skeleton on steroids, ready to use.
I have made a long blog post explaining all it contains; it will be the reference for documentation. I'll update it when needed:
So, this blog post is the official documentation. This readme is a teaser of what MicroSymfony contains.
If you want to use the last Symfony 6.4 LTS version in your composer.json
file, replace all occurrences of 7.1 with 6.4, run composer up, and you are
done.
Demo 🌈
Because a live demo is always better than all explanations. Here is it:
- Live demo at https://microsymfony.ovh
- Live demo powered by FrankenPHP at https://frankenphp.microsymfony.ovh
Quick-start with the Symfony binary 🎶
You must have the Symfony binary and composer installed locally.
To create a new project from the GitHub template, run:
composer create-project strangebuzz/microsymfony
cd microsymfony
Then start the PHP server with make:
make start
Or with Castor:
castor symfony:start
Open https://127.0.0.1:8000 (considering your 8000 port is free) and enjoy! 🙂
FrankenPHP 🧟
We can also use FrankenPHP to run MicroSymfony. You must have Docker installed locally.
Create a new project from the GitHub template, run:
docker run --rm -it -v $PWD:/app composer:latest create-project strangebuzz/microsymfony && cd microsymfony
Install the FrankenPHP Symfony runtime:
docker run --rm -it -v $PWD:/app composer:latest require runtime/frankenphp-symfony
Then run:
docker run \
-e FRANKENPHP_CONFIG="worker ./public/index.php" \
-e APP_RUNTIME=Runtime\\FrankenPhpSymfony\\Runtime \
-v $PWD:/app \
-p 80:80 -p 443:443 \
-d \
dunglas/frankenphp
Open https://localhost and enjoy! 🙂
PS: On Windows, replace $PWD by "%cd%".
Requirements ⚙
- PHP 8.2 (also works with PHP 8.3)
- The Symfony CLI
Optional requirements ⚙
- The Xdebug PHP extension if you want to run the code coverage report
- Castor task runner if you don't want to use Make and its Makefile
Stack 🔗
- Symfony 7.1
- Twig 3.8
- Hotwired stimulus 3.2 and Turbo 8.0
- PHPUnit 11.0
- The classless BareCSS CSS framework
PS: A fork of BareCSS was created to fix some issues as the project is not maintained anymore.
Features 🚀
MicroSymfony ships these features, ready to use:
- Two task runner
- Static analysis with PHPStan
- Coding standards with php-cs-fixer
- Tests (demo)
- Code coverage at 100%
- GitHub CI (actions)
- Asset mapper+Stimulus (documentation)
- A custom error template
Notes 📒
Turbo forms are disabled in assets/app.js.
To enable the feature for a given form, add the data-turbo="true" attribute to it.
Or change the parameter Turbo.setFormMode to on to activate the feature globally.
In both cases, your controller code has to be modified accordingly.
Other good practices 👌
- Using strict types in all PHP files (source)
- Using the ADR pattern in an action controller (source) (doc)
- The composer.json file is normalized with ergebnis/composer-normalize
- Use of the composer bin plugin to install and run php-cs-fixer
What it doesn't ship? ❌
- Doctrine (installation)
References 📚
- Front-end application development, Symfony-style(s) (dunglas.dev)
- Automated Test Coverage Checks with Travis, PHPUnit for Github Pull Requests (ocramius.github.io)
- Installing and using php-cs-fixer (strangebuzz.com)
- Castor, a journey across the sea of task runners (jolicode.com)
- Initializing your Symfony project with solid foundations (strangebuzz.com)
- Organizing your Symfony project tests (strangebuzz.com)
- What are your Symfony best practices? (strangebuzz.com)
- Setting a CI/CD workflow for a Symfony project thanks to the GitHub actions (strangebuzz.com)
- The Symfony Framework Best Practices (symfony.com)