wavevision/di-service-annotation

Register DI services using annotation for Nette Framework.

4.0.1 2020-10-21 14:38 UTC

README

Wavevision s.r.o.

DIService Annotation

CI Coverage Status PHPStan

Helper for registering Nette DI services via Doctrine Annotations, factory generator and inject generator.

Install

composer require --dev wavevision/di-service-annotation

Note: Install phpstan-nette if you need support for strict return types.

Usage

Annotate your service

use Wavevision\DIServiceAnnotation\DIService;

/**
 * @DIService(params={"%wwwDir%"}, generateInject=true, generateFactory=true)
 */
class ExampleService
{

}

Create runner script

For example bin/extract-services.php

use Wavevision\DIServiceAnnotation\Configuration;
use Wavevision\DIServiceAnnotation\Runner;

Runner::run(new Configuration('sourceDirectory', 'services.neon'));

Running this script with php bin/extract-services.php

will generate from class following:

Annotation options

  • enableInject: bool – will add inject: on to generated service config (default true)
  • generateComponent: bool – will generate <className>Component trait, with factory and createComponent<ClassName> implemented
  • generateFactory: bool – will generate <ClassName>Factory interface with create function
  • generateInject: bool – will generate Inject<ClassName> trait with property $<className> and inject<ClassName> function implemented
  • params: string[] – list of DI parameters to be passed to service constructor
  • tags: string[] – list of tags to be used with the service in generated config

For configuration options see Configuration properties.

Configuration option

Required

  • sourceDirectory: string – location of services
  • outputFile: string – output file for registered services

Optional

  • setMask: string – mask for file locator - default *.php
  • setFileMapping: array – map for splitting configs by namespace
$configuration->setFileMapping([
    'RootNamespace\Namespace1' => 'config1.neon',
    'RootNamespace\Namespace2' => 'config2.neon',
]);
  • setInjectGenerator: Inject – set custom generator for injects
  • setFactoryGenerator: Factory – set custom generator for factories
  • setComponentFactory: Component – set custom generator for components
  • setRegenerate: bool – regenerate all generated code each run - default false
  • enableFileValidation – check each file for fatal errors before reading annotation, skip file on error
    • autoloadFile: string – file for class autoloading, e.g. vendor/autoload.php
    • tempDir: string – enable cache, directory for cache file, only changed files are validated