web-dev-qa-db-ja.com

SymfonyエラークラスXXXはチェーン構成された名前空間XXXで見つかりませんでした

このテーマには他にもいくつかの質問がありますが、どれも本当に役に立ちませんでした。私はSymfonyが初めてなので、頭を悩ませるのはかなり難しいです。

私はファイルClient\IntranetBundle\LDAP\LDAPAuthenticationProvider.phpにあり、このコードはエラーを引き起こしています:

$user = new LDAPUser($username);

名前空間を追加しました:

use Client\IntranetBundle\LDAP\LDAPUser;

LDAPUserはUserInterfaceを実装します

私が得るエラーは

The class 'Client\IntranetBundle\LDAP\LDAPUser' was not found in the chain
configured namespaces Client\ClientBundle\Entity

それはどういう意味ですか?私が読んだことから、それはマッピングに関係しています。

Config.yml内のMy Doctrine ormは次のように設定されます:

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

うまくいけば、私を助けることができます。

編集#1

実際、そうではないことがわかりました

$user = new LDAPUser($username);

それがエラーの原因ですが、このエンティティを永続化しようとしているときです:

$entityManager->persist($user);

編集#2:

マッピングの何が問題なのか混乱しています。

<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
                http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">

<entity name="Client\IntranetBundle\LDAP\LDAPUser" table="users" repository-class="Client\ClientBundle\Repository\UserRepository">
    <id name="id" type="integer" column="id">
        <generator strategy="AUTO" />
    </id>
    <field name="username" column="username" type="string" length="100" />
</entity>

たぶん、2つのバンドル間をジャンプしているからでしょうか?

17
user1834464

デフォルトでは、auto_mapping機能はEntity名前空間の下でエンティティを探します。したがって、エンティティが存在しない場合、Doctrineはそれについて何も知りません。

エンティティをEntity名前空間の下に配置するか、手動でカスタムエンティティ名前空間を追加するためにDoctrine=を構成する必要があります。このようにすると、auto_mapping機能。したがって、すべてのバンドルを手動で登録する必要があります。

orm:
    auto_generate_proxy_classes: %kernel.debug%
    entity_managers:
        default:
            mappings:
                MyBundle:
                    type: annotation
                custom_mapping:
                    type: annotation
                    prefix: Client\IntranetBundle\LDAP\
                    dir: "%kernel.root_dir%/src/Client/IntranetBundle/LDAP/"
                    is_bundle: false

ご覧のように、バンドルのEntity名前空間の下にすべてを入れて、Doctrineに苦労させてください。

34

バンドルは、config/packages/doctrine.yaml(Symfony4)構成ファイルのservice/command/apiに使用している正しいエンティティマネージャーにマップする必要があります。

たとえば、次のdoctrine config、BundleNamedefaultエンティティマネージャとマッピングされるため、defaultエンティティマネージャを使用するコードdoctrine接続はBundleNameのエンティティとリポジトリにアクセスして使用できます。

orm:
    entity_managers:
        default:
            mappings:
              BundleName:
0
Hemant Thorat

あなたの多くを助けるためだけに。私は自分のプロジェクトでこのエラーを修正する場所を探していました。

私の間違いは、AppKernelファイル内の「ベンダー」に遠くのバンドル/バンドルを追加するのを忘れたことでした。

それらは「registerBundles」関数に登録されていません。

これが皆さんのお役に立てば幸いです!

0
aneth101