I want to migrate a symfony2.8 api to symfony5.4. I transferred all my Symfony commands, changed containerAwareCommand
to \Symfony\Component\Console\Command\Command
and changed the command configuration to match the configuration of the new version .
However, my commands are still not visible in the bin/console
list and I cannot use them without declaring them in the services.yml
. I have more than thirty commands to transfer and adding a paragraph in the service.yml
seems to me tedious and not necessary. Did I forget something?
Second question, how can I access the service container directly in the commands? On Symfony 2.8 I was accessing it with $this->getContainer()->get('toto')
but it doesn't seem to work anymore on version 5.
services.yml:
tags:
- { name: 'console.command', command: 'word:manager:expiration_email' }
arguments:
- '@service_container'
- '@logger'
Command:
protected function configure()
{
$this
->setName('word:manager:expiration_email')
->setDescription('Alert email : Send an email x days before the expiration.')
->addOption(
'days',
'd',
InputOption::VALUE_REQUIRED,
'How many days before the expiration',
1
);
}
/**
* {@inheritdoc}
*/
protected function execute(InputInterface $input, OutputInterface $output): int
{
$days = intval($input->getOption('days'));
if ($days > 0) {
try {
$this->getManager()->sendExpirationEmail($days);
} catch (\Exception $e) {
$this->container->get('logger')->error(sprintf(
'aemCommand: an error occurred in file "%s" (L%d): "%s"',
$e->getFile(),
$e->getLine(),
$e->getMessage()
));
}
}
return 0;
}
/**
* @return aem
*/
private function getManager()
{
return $this->container->get('word.manager.alert_employee');
}
services.yml:
imports:
- { resource: "@WORDCoreBundle/Resources/config/services.yml" }
- { resource: "@WORDAlertBundle/Resources/config/services.yml" }
- { resource: "@WORDEmployeeBundle/Resources/config/services.yml" }
- { resource: "@WORDTimeManagementBundle/Resources/config/services.yml" }
- { resource: "@WORDUserBundle/Resources/config/services.yml" }
- { resource: "@WORDFileBundle/Resources/config/services.yml" }
- { resource: "@WORDLocalisationBundle/Resources/config/services.yml" }
- { resource: "@WORDPlatformBundle/Resources/config/services.yml" }
- { resource: "@WORDCompanyBundle/Resources/config/services.yml" }
- { resource: "@WORDContractBundle/Resources/config/services.yml" }
- { resource: "@WORDFolderBundle/Resources/config/services.yml" }
- { resource: "@WORDTrainingBundle/Resources/config/services.yml" }
- { resource: "@WORDExpenseReportBundle/Resources/config/services.yml" }
- { resource: "@WORDBookStoreBundle/Resources/config/services.yml" }
- { resource: "@WORDPaymentBundle/Resources/config/services.yml" }
- { resource: "@WORDInvoiceBundle/Resources/config/services.yml" }
- { resource: "@WORDAgendaBundle/Resources/config/services.yml" }
- { resource: "@WORDAlertBundle/Resources/config/services.yml" }
- { resource: "@WORDAnnualReviewBundle/Resources/config/services.yml" }
- { resource: "@WORDProReviewBundle/Resources/config/services.yml" }
- { resource: "@WORDWidgetBundle/Resources/config/services.yml" }
- { resource: "@WORDCommentBundle/Resources/config/services.yml"}
- { resource: "@WORDFrontBundle/Resources/config/services.yml" }
- { resource: "@WORDNotificationBundle/Resources/config/services.yml" }
services:
App\:
resource: '../src/'
exclude:
- '../src/DependencyInjection/'
- '../src/Entity/'
- '../src/Kernel.php'
_defaults:
autowire: true
autoconfigure: true
WORD\CoreBundle\Controller\ApiController:
calls:
- method: setContainer
arguments: ['@service_container']
WORD\PlatformBundle\Controller\PlatformRESTController:
calls:
- method: setContainer
arguments: ['@service_container']
WORD\UserBundle\Controller\UserRESTController:
calls:
- method: setContainer
arguments: ['@service_container']
WORD\AlertBundle\Controller\AlertRESTController:
calls:
- method: setContainer
arguments: ['@service_container']
WORD\EmployeeBundle\Controller\EmployeeRESTController:
calls:
- method: setContainer
arguments: ['@service_container']
WORD\CompanyBundle\Controller\CompanyRESTController:
calls:
- method: setContainer
arguments: ['@service_container']
WORD\CompanyBundle\Controller\ContactRESTController:
calls:
- method: setContainer
arguments: ['@service_container']
WORD\CompanyBundle\Controller\ServiceRESTController:
calls:
- method: setContainer
arguments: ['@service_container']
WORD\CompanyBundle\Controller\ChartRESTController:
calls:
- method: setContainer
arguments: ['@service_container']
WORD\BookStoreBundle\Controller\InfoRESTController:
calls:
- method: setContainer
arguments: ['@service_container']
WORD.user.manager.user:
class: 'WORD\UserBundle\Service\UserManager'
public: false
lazy: true
arguments:
- '@fos_user.util.password_updater'
- '@fos_user.util.canonical_fields_updater'
- '@fos_user.object_manager'
- 'WORD\UserBundle\Entity\User'
WORD\AgendaBundle\DataFixtures\AgendaFixtures:
tags: [doctrine.fixture.orm]
WORD\UserBundle\DataFixtures\UserFixtures:
tags: [doctrine.fixture.orm]
arguments:
$fos_manager: '@fos_user.user_manager'
WORD\LocalisationBundle\DataFixtures\CountryFixtures:
tags: [doctrine.fixture.orm]
App\DataFixtures\Processor\UserProcessor:
tags: [ { name: fidry_alice_data_fixtures.processor } ]
WORD\AlertBundle\Command\AlertExpirationEmailCommand:
tags:
- { name: 'console.command', command: 'WORD:alert:expiration_email' }
arguments:
- '@service_container'
- '@logger'
Composer.json
"autoload": {
"psr-4": {
"App\\": "src/",
"WORD\\": "WORD"
}
},