Single-File Symfony Apps? Yes, with MicroKernelTrait!
A Single Page Application (SPA) offers a desktop experience to users of a web application by loading a single HTML page, and dynamically updating it as required without reloading. However, a Symfony application may have hundreds of classes, and in a basic application we end up with lots of files we don’t really need.
The latest versions of Symfony (2.8 and 3.0) introduce us to the concept of a Single File Application (SFA) – a super-slim application or micro-framework implemented in one file.
To follow along, you need to have a running web server and have your way of running web applications locally. See Laravel Valet article for a quick way of setting up a local development environment that doesn’t require configuring a web server, virtual hosts and mucking about with a hosts file. Another option is our trusty Homestead Improved for a ready-to-go experience.
Step 1: Install Barebones Symfony
We are going to install Symfony with Composer as it allows us install only the main package. Create a folder where you usually have your web applications and let’s call it
sfa. I’ve got mine under
~/Sites/sfa. In it, we install Symfony:
composer require symfony/symfony
Now, create 2 folders inside
sfa and name them
Step 2: The Front Controller
sfa/web we will house our front controller – a file that receives all requests to the application, passes it to the right place for processing and returns the response to the client that made the request.
You can call this file anything, but you need to make sure your web server has been configured to find it in the correct place. Laravel has
public/index.php, Drupal 8 has
index.php, and Symfony has
web/app_dev.php (during development) and
web/app.php (during production). Since this is a Symfony application, let’s call ours
<?php use SymfonyComponentHttpFoundationRequest; require __DIR__.'/../vendor/autoload.php'; require __DIR__ . '/../app/SfaKernel.php'; $kernel = new SfaKernel('dev', true); $request = Request::createFromGlobals(); $response = $kernel->handle($request); $response->send(); $kernel->terminate($request, $response);
Two small differences between this file and a vanilla Symfony 3 installation.
Firstly, our kernel class is going to be in
app/SfaKernel.php. Nothing stops us from calling it
Kernel.php, but we want something different. Secondly, we opt not to call the
loadClassCache() method. Our application is a slim one, without a good number of classes from a standard installation, so we can leave that method out for now.
Even though we’re talking about a single file app, you’ll notice it’s not really a single file – we do have a front controller and a mini-kernel which does all the heavy lifting. That’s in addition to all the other classes loaded from
vendor. However, for all intents and purposes, starting and running a Symfony app from a single Kernel file can be regarded as a single file application.
Continue reading %Single-File Symfony Apps? Yes, with MicroKernelTrait!%