Standalone Components
Many Tempest components can be installed as standalone packages in existing or new projects: tempest/console
, tempest/http
, tempest/event-bus
, tempest/debug
, tempest/command-bus
, etc.
A note up front: since Tempest is still in its early stages, some components depend on tempest/core
, which shouldn't. There's a lot of work to be done to make components like tempest/mapper
truly independent.
tempest/console
composer require tempest/console
tempest/console
ships with a built-in binary:
./vendor/bin/tempest Tempest /* … */
Or you can manually boot the console application like so:
<?php use \Tempest\Console\ConsoleApplication; require_once __DIR__ . '/vendor/autoload.php'; ConsoleApplication::boot()->run();
tempest/http
tempest/http
contains all code to run a web application: router and view renderer, controllers, HTTP exception handling, view components, etc.
composer require tempest/http
Note that tempest/console
is shipped with tempest/http
as well so that you can manage discovery cache, static pages, debug routes, use the local dev server, etc.
You can install the necessary files with the built-in tempest console:
./vendor/bin/tempest install framework
Or you can manually create an index.php
file in your project's public folder:
<?php use \Tempest\Router\HttpApplication; require_once __DIR__ . '/vendor/autoload.php'; HttpApplication::boot( root: __DIR__ . '/../', )->run();
Note that the root
path passed in HttpApplication::boot
should point to your project's root folder.
tempest/container
tempest/container
is Tempest's standalone container implementation. Note that this package doesn't provide discovery, so initializers will need to be added manually.
composer require tempest/container
$container = new Tempest\Container\GenericContainer(); $container->addInitializer(FooInitializer::class); $foo = $container->get(Foo::class);
tempest/debug
tempest/debug
provides the lw
, ld
and ll
functions. This package is truly standalone, but when installed in a Tempest project, it will also automatically write to configured log files.
composer require tempest/debug
ld($variable);
tempest/view
Tempest's view renderer can be used to render views.
composer require tempest/view
$container = Tempest::boot(__DIR__); $view = view(__DIR__ . '/src/b.view.php'); echo $container->get(ViewRenderer::class)->render($view);
tempest/event-bus
Tempest's event bus can be used as a standalone package, in order for event handlers to be discovered, you'll have to boot Tempest's kernel and resolve the event bus from the container:
composer require tempest/event-bus
$container = Tempest::boot(); // You can manually resolve the event bus from the container $eventBus = $container->get(\Tempest\EventBus\EventBus::class); $eventBus->dispatch(new MyEvent()); // Or use the `event` function, which is shipped with the package \Tempest\event(new MyEvent());
tempest/command-bus
Tempest's event bus can be used as a standalone package, in order for event handlers to be discovered, you'll have to boot Tempest's kernel and resolve the event bus from the container:
composer require tempest/command-bus
$container = Tempest::boot(); // You can manually resolve the command bus from the container $commandBus = $container->get(\Tempest\CommandBus\CommandBus::class); $commandBus->dispatch(new MyCommand()); // Or use the `command` function, which is shipped with the package \Tempest\command(new \Brendt\MyEvent());
tempest/mapper
tempest/mapper
maps data between many types of sources, from arrays to objects, objects to JSON, …
composer require tempest/mapper
Tempest::boot(); $foo = map(['name' => 'Hi'])->to(Foo::class);