/console-di-annotations

PHP Console App: auto-config skeleton with Dependency Injection, Annotations.

Primary LanguagePHPMIT LicenseMIT

PHP Console with DI and Annotations

Build PHP Console applications with Dependency Injection and Annotations.

Setup app skeleton and install dependencies with composer:

composer create-project elbakerino/console

That's it - ready to code!

Run demo commands:

# get help
php cli -h

# how to access operands, see `Commands\Demo->handle`    
php cli demo
php cli demo World
php cli demo:welcome
php cli demo:bye

For Docker, download repository and spin up services:

git clone https://github.com/elbakerino/console-di-annotations.git

docker-compose up

# open second terminal:
# open `bash` in docker service `app` with user `www-data`
docker-compose exec -u www-data app bash
composer install

Command Setup

At _commands.php demo GetOpt-PHP commands are registered with inline documentation.

Here also the commands are registered for found annotations.

For only manual command, it's as short as:

<?php
return static function(GetOpt\GetOpt $get_opt) {
    // already dependency injected!

    $get_opt->addCommand(new GetOpt\Command('demo', [Commands\Demo::class, 'handle']));
    //                   new GetOpt\Command(<name>,  <handler>,                     <options>[optional])
};

You can register commands with annotations, like the demo commands (todo: annotation command docs).

See Commands\Demo for a demo class command handler, any callable/resolvable is possible as command handler.

See Commands\DemoMultiple for a demo class command handler which uses annotations at method level, not class level.

Schematic use of defined commands:

php cli <name> <..operand> <..-a=opt>

More Details

In launch.php the whole setup and auto-config is done, see inline-comments for details.

In _definitions.php you can define/overwrite service definitions for PHP-DI.

See Lib\ConsoleApp for the execution of GetOpt, use as base to switch to another console framework.

See Annotations for example annotations, further docs on annotation will follow / can be found below in the libraries links.

Configure Docker in docker-compose.yml. Simply change PHP version, image base and add other PHP extensions in Dockerfile, rebuild image with docker-compose up --build. When changing docker-opcache.ini or docker-vhost.conf a rebuild is needed.

For further details see:

Install any other dependency for your project from packagist.

Todos

There is not really more needed, you can write simple and efficient console apps.

Some nice to haves would be:

  • print line, print success, print error helper functions
  • print in color helper functions
  • input handling helper functions
  • some middleware pipelines around commands
    • time and performance middleware
  • logging with PSR logger (monolog) by default

Downloads

  • See Composer Package.
  • Repository git clone https://github.com/elbakerino/console-di-annotations.git

License

This project is free software distributed under the MIT License.

See: LICENSE.

Contributors

By committing your code to the code repository you agree to release the code under the MIT License attached to the repository.


Author: Michael Becker