关于这个问题还有其他一些问题,但没有一个真正有用。我是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中的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>
也许是因为我在两个捆绑之间跳跃?
默认情况下,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进行艰苦的工作。
只是为了帮助更多的你。我一直在寻找在我的项目上修复此错误的地方。
事实证明,我的错误是我忘记在我的AppKernel文件中的“vendor”中添加远程bundle / bundles。
它们未在“registerBundles”功能中注册。
我希望这一个可以帮助你们!
您的捆绑包应使用config/packages/doctrine.yaml
(Symfony4)配置文件中用于service / command / api的正确实体管理器进行映射。
例如,在以下doctrine配置中,BundleName
与default
实体管理器映射,因此使用default
实体管理器doctrine连接的代码可以访问和使用BundleName
的实体和存储库。
orm:
entity_managers:
default:
mappings:
BundleName: