flo / nimic
A console app backbone with a cacheable dependency injection container
Requires
- php: >=5.4.0
- monolog/monolog: ~1.1
- symfony/config: ~2.5
- symfony/console: ~2.5
- symfony/dependency-injection: ~2.5
- symfony/event-dispatcher: ~2.5
Requires (Dev)
- phpunit/phpunit: 4.1.*
This package is not auto-updated.
Last update: 2024-11-05 03:30:13 UTC
README
Nimic provides a good starting point for a php console application. Its purpose is to provide a base for your code with access to a (cacheable) dependency injection container, a console application ready to carry (symfony) commands, an event dispatcher and a monolog instance and phpunit. It's basically a facade built upon symfony components.
Installation
You can clone the [github repo][1], but the recommended method is through composer. Require [flo / nimic][2] in your composer.json.
Basic usage
Inside your app put this in somefile.php
/** * composer autoloader: */ require 'vendor/autoload.php'; $kernel = new \Flo\Nimic\Kernel\NimiKernel; //extend this kernel! /** * This is a Symfony2 container */ $container = $kernel->getContainer(); /** * with some predefined services, like this (Console Component) application */ $app = $container->get('app'); /** * on which you should add your own commands: */ $app->add(new MyCommand); /** * before running it */ $app->run();
Create your commands [like this][3].
Adding a new service
You have to
- [create your extension][5] class
- using the extension, [add the command service definition][4] to the container.
- (optional) If the service is a command, an event listener or subscriber then you should tag it with command, listener or subscriber. See [this][7] for events.
In order to register your extension with the container, you'll have to [override][8] NimiKernel::getExtensions(). This method should return an array of your ExtensionInterface instances, and it's quite possible that you'll need only one extension.
class YourCustomKernel extends \Flo\Nimic\Kernel\NimiKernel { ... /** * @return array Array of your own extensions */ protected function getExtensions() { return [ new YourExtension() ]; } ... }
And then continue with the basic usage example, but instead of
$kernel = new \Flo\Nimic\Kernel\NimiKernel;
do
$kernel = new YourCustomKernel;
Again, using the extension, you can add (or override) any container service, not just Command classes.
example.php
#!/usr/bin/env php <?php /** * If you use composer you should use its autoloader: */ $loader = require 'vendor/autoload.php'; /** * In case you need to inject custom services into the container you'll have to: * override NimiKernel * create an extension * add its instance to the array returner by YourCustomKernel::getExtensions (so that the extension will be registered before the container gets compiled) * make the extension load your services xml or yaml or whatever */ $kernel = new Flo\Nimic\Kernel\NimiKernel; /** * If the kernel returns a writable cache dir ( YourCustomKernel::getCacheDir ) then the container is cached */ $container = $kernel->getContainer(); /** * This is the main entry point for your console application * http://symfony.com/doc/current/components/console/index.html */ $app = $container->get('app'); /** * Here you can add commands using $app->add() * The other method of adding commands is through the custom extension, by defining command services tagges "command" */ $app->run();
Testing Commands
See [this][6]. [1]: https://github.com/florinutz/nimic [2]: https://packagist.org/packages/flo/nimic [3]: http://symfony.com/doc/current/components/console/introduction.html#creating-a-basic-command [4]: http://symfony.com/doc/current/components/dependency_injection/definitions.html [5]: http://symfony.com/doc/current/components/dependency_injection/compilation.html#managing-configuration-with-extensions [6]: http://symfony.com/doc/current/components/console/introduction.html#testing-commands [7]: http://symfony.com/doc/current/cookbook/service_container/event_listener.html [8]: http://stackoverflow.com/questions/2994758/what-is-function-overloading-and-overriding-in-php