关于这个问题已经有其他问题了,但是没有一个是真正有用的。我是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中的我的教义orm设置为:
orm: auto_generate_proxy_classes: %kernel.debug% auto_mapping: true
希望你能帮助我。
编辑#1 :
其实我发现不是
这是导致错误的原因,但是当我尝试保留此实体时:
$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对此一无所知。
auto_mapping
Entity
您需要将您的实体放置在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进行艰苦的工作。