0

I have an old Symfony 3.4 app (https://github.com/opencfp/opencfp) that needs to have Doctrine added to it so I can replace an existing auth/acl solution with Symfony Guard and then get moving towards upgrading towards Symfony 5. I've installed doctrine/doctrine-bundle and can see that the commands are in the vendor directory but when I run bin/console none of the doctrine commands show up.

Here's what I found when I searched my vendor directory for Doctrine console commands.

doctrine/doctrine-bundle/Resources/config/dbal.xml
87:            <tag name="console.command" command="doctrine:database:create" />
93:            <tag name="console.command" command="doctrine:database:drop" />
97:            <tag name="console.command" command="doctrine:database:import" />

doctrine/doctrine-bundle/Command/Proxy/ImportDoctrineCommand.php
23:            ->setName('doctrine:database:import')

doctrine/doctrine-bundle/Command/DropDatabaseDoctrineCommand.php
29:            ->setName('doctrine:database:drop')

doctrine/doctrine-bundle/Command/CreateDatabaseDoctrineCommand.php
25:            ->setName('doctrine:database:create')

When I run bin/console I don't see any of the commands in the doctrine namespace

Symfony 3.4.35 (kernel: OpenCFP, env: development, debug: true)

Usage:
  command [options] [arguments]

Options:
  -h, --help            Display this help message
  -q, --quiet           Do not output any message
  -V, --version         Display this application version
      --ansi            Force ANSI output
      --no-ansi         Disable ANSI output
  -n, --no-interaction  Do not ask any interactive question
  -e, --env=ENV         The Environment name. [default: "development"]
      --no-debug        Switches off debug mode.
  -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Available commands:
  about                      Displays information about the current project
  help                       Displays help for a command
  list                       Lists commands
 assets
  assets:install             Installs bundles web assets under a public directory
 cache
  cache:clear                Clears the cache
  cache:pool:clear           Clears cache pools
  cache:pool:prune           Prunes cache pools
  cache:warmup               Warms up an empty cache
 config
  config:dump-reference      Dumps the default configuration for an extension
 debug
  debug:autowiring           Lists classes/interfaces you can use for autowiring
  debug:config               Dumps the current configuration for an extension
  debug:container            Displays current services for an application
  debug:event-dispatcher     Displays configured listeners for an application
  debug:form                 Displays form type information
  debug:router               Displays current routes for an application
  debug:swiftmailer          Displays current mailers for an application
  debug:translation          Displays translation messages information
  debug:twig                 Shows a list of twig functions, filters, globals and tests
 eloquent
  eloquent:make:seeder       Create a new seeder class
  eloquent:migrate           Executes a migration.
  eloquent:migrate:fresh     Drop all tables and re-run all migrations.
  eloquent:migrate:install   Creates the migration repository.
  eloquent:migrate:make      Creates a new migration file
  eloquent:migrate:refresh   Reset and re-run all migrations
  eloquent:migrate:reset     Rollback all database migrations
  eloquent:migrate:rollback  Rollback the last database migration
  eloquent:migrate:status    Show the status of each migration
  eloquent:seed              Seed the database with records
 lint
  lint:twig                  Lints a template and outputs encountered errors
  lint:xliff                 Lints a XLIFF file and outputs encountered errors
  lint:yaml                  Lints a file and outputs encountered errors
 router
  router:match               Helps debug routes by simulating a path info match
 server
  server:log                 Starts a log server that displays logs in real time
  server:run                 Runs a local web server
  server:start               Starts a local web server in the background
  server:status              Outputs the status of the local web server
  server:stop                Stops the local web server that was started with the server:start command
 swiftmailer
  swiftmailer:email:send     Send simple email message
  swiftmailer:spool:send     Sends emails from the spool
 translation
  translation:update         Updates the translation file
 user
  user:create                Creates a new user
  user:demote                Demote an existing user from a role
  user:promote               Promote an existing user to a role

I do have some custom commands in there as well.

Any help is greatly appreciated.

5
  • Have you not forgot to enabled the bundle? symfony.com/doc/current/bundles/DoctrineBundle/… I can't see the bundle on the current master, is that on a local branch? Commented Nov 30, 2019 at 20:23
  • That seems to have made the 'doctrine:cache' commands show up but not the 'doctrine:database' ones Commented Nov 30, 2019 at 20:44
  • Can you provide the result of composer show? Also, are all Doctrine bundles registered correctly as the previous one? Doctrine cache is supposed to be a different bundle I believe (Doctrine\Bundle\DoctrineCacheBundle\DoctrineCacheBundle), so are Migrations and fixtures. Doctrine\Bundle\DoctrineBundle\DoctrineBundle is supposed to load all the doctrine ORM commands if doctrine/orm is installed I believe. Commented Nov 30, 2019 at 21:15
  • My composer show output is too long to paste in this comment. I pushed my latest set of changes up to the master branch so you can take a look there Commented Nov 30, 2019 at 21:51
  • Looks like a configuration problem. From vendor/doctrine/doctrine-bundle/DependencyInjection/DoctrineExtension.php it looks like configuration is required to enable commands. Commented Nov 30, 2019 at 23:12

1 Answer 1

0

From what I gather from vendor/doctrine/doctrine-bundle/DependencyInjection/DoctrineExtension.php, a proper configuration for both the DBAL and the ORM are required to enable the commands:

public function load(array $configs, ContainerBuilder $container)
{
    $configuration = $this->getConfiguration($configs, $container);
    $config        = $this->processConfiguration($configuration, $configs);

    $this->adapter->loadServicesConfiguration($container);
    if (! empty($config['dbal'])) {
        $this->dbalLoad($config['dbal'], $container);

        $this->loadMessengerServices($container);
    }

    if (empty($config['orm'])) {
        return;
    }

    if (empty($config['dbal'])) {
        throw new LogicException('Configuring the ORM layer requires to configure the DBAL layer as well.');
    }

    $this->ormLoad($config['orm'], $container);
}

The ormLoad and dbalLoad are responsible for registering the commands.

In this specific instance, Doctrine needs to be registered:

doctrine:
  dbal:
    url: mysql://db_user:[email protected]:3306/db_name
  orm: ~

The above goes at the end of resources/config/config.yml, or any other file of that folder. Also, you'd need to make the proper adjustments.

doctrine
  doctrine:cache:clear-collection-region  Clear a second-level cache collection region
  doctrine:cache:clear-entity-region      Clear a second-level cache entity region
  doctrine:cache:clear-metadata           Clears all metadata cache for an entity manager
  doctrine:cache:clear-query              Clears all query cache for an entity manager
  doctrine:cache:clear-query-region       Clear a second-level cache query region
  doctrine:cache:clear-result             Clears result cache for an entity manager
  doctrine:cache:contains                 Check if a cache entry exists
  doctrine:cache:delete                   Delete a cache entry
  doctrine:cache:flush                    [doctrine:cache:clear] Flush a given cache
  doctrine:cache:stats                    Get stats on a given cache provider
  doctrine:database:create                Creates the configured database
  doctrine:database:drop                  Drops the configured database
  doctrine:database:import                Import SQL file(s) directly to Database.
  doctrine:ensure-production-settings     Verify that Doctrine is properly configured for a production environment
  doctrine:generate:entities              [generate:doctrine:entities] Generates entity classes and method stubs from your mapping information
  doctrine:mapping:convert                [orm:convert:mapping] Convert mapping information between supported formats
  doctrine:mapping:import                 Imports mapping information from an existing database
  doctrine:mapping:info                   
  doctrine:query:dql                      Executes arbitrary DQL directly from the command line
  doctrine:query:sql                      Executes arbitrary SQL directly from the command line.
  doctrine:schema:create                  Executes (or dumps) the SQL needed to generate the database schema
  doctrine:schema:drop                    Executes (or dumps) the SQL needed to drop the current database schema
  doctrine:schema:update                  Executes (or dumps) the SQL needed to update the database schema to match the current mapping metadata
  doctrine:schema:validate                Validate the mapping files
Sign up to request clarification or add additional context in comments.

1 Comment

I put those values into resources/config/config_development.yml and it worked perfectly.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.