symfony / maker-bundle

Symfony Maker Bundle
https://symfony.com/
MIT License
3.35k stars 406 forks source link

make:user and make:entity workflow not working properly with Symfony 6.2 #1279

Open fabpico opened 1 year ago

fabpico commented 1 year ago

I want to use make:user as in https://symfony.com/doc/current/security.html#the-user.

I have PHP 8.1.11. My composer.json:

{
  "require": {
    "symfony/runtime": "^6.2",
    "symfony/http-kernel": "^6.2",
    "symfony/framework-bundle": "^6.2",
    "symfony/console": "^6.2",
    "doctrine/doctrine-bundle": "^2.8"
  },
  "require-dev": {
    "phpunit/phpunit": "^9.5",
    "symfony/maker-bundle": "^1.48",
    "symfony/security-bundle": "^6.2"
  },
  "autoload": {
    "psr-4": {
      "App\\": "src/"
    }
  },
  "config": {
    "allow-plugins": {
      "symfony/runtime": true
    }
  }
}

When I make

php bin/console make:user

I receive

[ERROR] Missing package: Doctrine must be installed to store user data in the database, run:                           

         composer require orm

I assume this is a Flex alias. Because when I do:

composer require orm

I receive

Did you mean one of these?   
      doctrine/orm             
      nelmio/alice             
      propel/propel            
      symfony/orm-pack         
      topthink/think

I propose to directly suggest the needed package, to be friendly with non-Flex users. So when I do (after removing composer.lock):

composer require symfony/orm-pack

I can use make:user until this happens

Doctrine ORM Manager named "" does not exist.

So I go the other way around and configure the ORM first https://symfony.com/doc/current/doctrine.html . It says I have to install:

symfony/orm-pack
symfony/maker-bundle

Already done.

DBAL connection works, tested with temporary call in controller:

$result = $this->connection->executeQuery('SELECT * FROM "public"."foo"');
$foo = $result->fetchAssociative();

Now I try out make:entity (just to test ORM)

https://symfony.com/doc/current/doctrine.html#creating-an-entity-class

Still I get

Doctrine ORM Manager named "" does not exist.

I suggest that a minimum ORM configuration is described in this make:entity documentation, or a least a direct link to another documentation page to quickly configure ORM. As in https://stackoverflow.com/questions/35810105/doctrine-orm-manager-named-does-not-exist I tried

  orm:
    auto_generate_proxy_classes: '%kernel.debug%'
    auto_mapping: true

I run make:entity again, I receive

created: src/Entity/User.php
created: src/Repository/UserRepository.php

 [ERROR] Only attribute mapping is supported by make:entity, but the <info>App\Entity\User</info> class uses a different
         format. If you would like this command to generate the properties & getter/setter methods, add your mapping    
         configuration, and then re-run this command with the <info>--regenerate</info> flag.

https://stackoverflow.com/a/73145112/4840661 /which relates to https://github.com/symfony/maker-bundle/issues/1152 and https://github.com/symfony/maker-bundle/issues/841), suggest to downgrade to symfony/maker-bundle:1.43 .

I try again with v1.43, I receive a similar message

created: src/Entity/User.php
created: src/Repository/UserRepository.php

 [ERROR] Only annotation or attribute mapping is supported by make:entity, but the <info>App\Entity\User</info> class uses
         a different format. If you would like this command to generate the properties & getter/setter methods, add your
         mapping configuration, and then re-run this command with the <info>--regenerate</info> flag.

Back to make:user, assuming that at least the ORM is configured correctly, I receive (among other things)

Success!

The way until this success message was very laborious, it should be more easy and straightforward.

Summarized

Other people also still complain about the annotation error message, even after closing the issue https://github.com/symfony/maker-bundle/issues/841#issuecomment-1228537605 .

vipinbose commented 1 year ago

Remove type: annotation from doctrine.yaml

fabpico commented 1 year ago

@vipinbose I don't have such configuration in doctrine.yaml.

juliolopeztorres commented 1 year ago

In case anyone finds this useful, I ran into the same issue. By adding the file config/packages/maker.yaml with the following content:


when@dev:
    maker:
        root_namespace: Acme\Your\Namespace

Solved the issue for me.