Skip to content
This repository has been archived by the owner on Jan 21, 2023. It is now read-only.

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

License

Notifications You must be signed in to change notification settings

elbakerino/console-di-annotations

Repository files navigation

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

About

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

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published