Are you warm yet, my little application?
Morozko is a utility for cache warmup in a Nette Framework application.
$ composer require oops/morozkoOops/Morozko requires PHP >= 7.1.
Oops/Morozko provides a Symfony/Console command, thus, you must also install and configure a Symfony/Console integration package such as Kdyby/Console or contributte/console.
Register the extension in your config file. Don't forget to register a Symfony/Console integration as well:
extensions:
morozko: Oops\Morozko\DI\MorozkoExtension
console: Kdyby\Console\DI\ConsoleExtensionThen you can directly run the oops:morozko:warmup command, or add it to your deploy process.
By default, the oops:morozko:warmup command executes one default cache warmer: the NetteConfiguratorCacheWarmer, which compiles the DI container.
To be able to do so, it needs to know how your DI container is configured - you need to provide it with an implementation of ConfiguratorFactoryInterface whose create() method should return the same Configurator as in your application's bootstrap.php. Actually, it might be wise to use the implementation in bootstrap.php to prevent code duplication.
<?php
namespace My\Application;
use Nette\Configurator;
use Oops\Morozko\CacheWarmers\NetteConfiguratorCacheWarmer\ConfiguratorFactoryInterface;
final class ConfiguratorFactory implements ConfiguratorFactoryInterface
{
public function create(): Configurator
{
$configurator = new Configurator();
// ... configure application ...
return $configurator;
}
}morozko:
configuratorFactory: My\Application\ConfiguratorFactoryBe aware that in CLI the %wwwDir% and %appDir% parameters might not actually point to the document root. For example, if you run console commands via bin/console.php, it will likely point to the bin directory.
If that is your case, you need to set the parameters to the correct values in your configurator factory, otherwise the generated DI container won't match the one actually used in production:
<?php
$configurator = new Nette\Configurator();
$configurator->addParameters([
'appDir' => __DIR__,
'wwwDir' => __DIR__ . '/../www',
]);
// ...There are currently these official additions to the Morozko's DI container cache warmer:
oops/morozko-latte-bridgepre-compiles all Latte templates found within a configured directory.oops/morozko-doctrine-bridgewarms up Doctrine metadata cache and generates entity proxies.
You can also create your own cache warmers. Simply create a class implementing the Oops\Morozko\CacheWarmer interface and register it as a service into the DI container.
If you have a cache warmer that you'd like to share with others, feel free to add it to this section via a pull request.
