Skip to content

Command cannot depend on other command #48

@foglcz

Description

@foglcz

So I have interesting use-case. I have a command, which I want to execute from other command -- because one is maintenance and one is a one-time migration, which is quite extensive (essentially, we're upgrading systems.)

Soooo, I've did this:

console:
    commands:
        - App\Commands\Maintenance\Focus\Paths(%focusPaths%, @focusDibi.connection)
        - App\Commands\MigrationScripts\Y2016Q1\CleanupFocus(%focusPaths%, @focusDibi.connection)

Constructor looks like this:

namespace App\Commands\MigrationScripts\Y2016Q1;

use App\Commands\Maintenance\Focus\Paths;
use Dibi\Connection;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class CleanupFocus extends Command
{
    /** @var Paths */
    private $pathsCommand;

    public function __construct(array $paths, Connection $focusDibi, Paths $pathsCommand)
    {
        parent::__construct('migrate:y2016q1:focus');
        $this->setDescription('Migrations for FOCUS database, 2016/Q1, the infrastructure overhaul');
        $this->pathsCommand = $pathsCommand;
        // ...
    }

    public function execute(InputInterface $input, OutputInterface $output)
    {
        // ...

        // set options & run the maintenance
        $input->setOption('all', true);
        $input->setOption('force', true);
        $this->pathsCommand->execute($input, $output);

        // ...
    }
}

BUT the DI builder throws a following exception:

[2016-02-08 19-50-14] Nette\DI\ServiceCreationException:
Service 'console.command.0':
Service of type App\Commands\Maintenance\Focus\Paths needed by App\Commands\MigrationScripts\Y2016Q1\CleanupFocus::__construct() not found. 
Did you register it in configuration file? 

Stack trace:
#0 C:\Users\pptacek\www\projectname,ha!\vendor\nette\di\src\DI\Compiler.php(213): Nette\DI\ContainerBuilder->generateClasses(NULL, NULL)
#1 C:\Users\pptacek\www\projectname,ha!\vendor\nette\di\src\DI\Compiler.php(139): Nette\DI\Compiler->generateCode(NULL, NULL)
#2 C:\Users\pptacek\www\projectname,ha!\vendor\nette\bootstrap\src\Bootstrap\Configurator.php(264): Nette\DI\Compiler->compile()
#3 [internal function]: Nette\Configurator->generateContainer(Object(Nette\DI\Compiler))
#4 C:\Users\pptacek\www\projectname,ha!\vendor\nette\di\src\DI\ContainerLoader.php(111): call_user_func_array(Array, Array)
#5 C:\Users\pptacek\www\projectname,ha!\vendor\nette\di\src\DI\ContainerLoader.php(76): Nette\DI\ContainerLoader->generate('Container_168f2...', Array)
#6 C:\Users\pptacek\www\projectname,ha!\vendor\nette\di\src\DI\ContainerLoader.php(41): Nette\DI\ContainerLoader->loadFile('Container_168f2...', Array)
#7 C:\Users\pptacek\www\projectname,ha!\vendor\nette\bootstrap\src\Bootstrap\Configurator.php(218): Nette\DI\ContainerLoader->load(Array, Array)
#8 C:\Users\pptacek\www\projectname,ha!\app\bootstrap.php(23): Nette\Configurator->createContainer()
#9 C:\Users\pptacek\www\projectname,ha!\www\index.php(6): require('C:\\Users\\pptace...')
#10 {main}
(stored in C:\Users\pptacek\www\projectname,ha!\app\..\log\exception--2016-02-08--19-50--1b383ca34c.html)�

If you'd point me to the proper point where I can fix this one, I'd apprecieate it. Cannot continue on it today, but will jump on it first thing tomorrow morning (basically - I need it working :)) )

Creating an issue, since in services section of Nette DI, you can reference other services from constructors -- so this is solvable, somehow.

I know, hotfix might be using @inject - didn't test.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions