Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ';在链配置的命名空间';在职_Php_Symfony_Doctrine Orm - Fatal编程技术网

Php ';在链配置的命名空间';在职

Php ';在链配置的命名空间';在职,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我在Symfony中配置了一个服务: v_bla_orm.listener.address: class: Bla\OrmBundle\EventListener\AddressManager calls: - [ setContainer, [ @service_container ] ] tags: - { name: doctrine.event_listener, event: preP

我在Symfony中配置了一个服务:

   v_bla_orm.listener.address:
        class: Bla\OrmBundle\EventListener\AddressManager
        calls:
            - [ setContainer, [ @service_container ] ]
        tags:
            - { name: doctrine.event_listener, event: prePersist } 
            - { name: doctrine.event_listener, event: preUpdate }  
在单元测试中运行代码时,将发生以下异常:

在链配置的命名空间Bla\OrmBundle\Entity、iovor\GoogleMapBundle\Entity中找不到类“Bla\OrmBundle\EventListener\AddressManager”

在单步执行代码时,我确定异常发生在
AddressManager
中的下一行:

$meta = $em->getClassMetadata(get_class($entity));
整个功能:

public function preUpdate(LifecycleEventArgs $args) {
    $entity = $this->getLatLong($args);
    $em = $args->getEntityManager();
    $uow = $em->getUnitOfWork();
    $meta = $em->getClassMetadata(get_class($entity));
    $uow->recomputeSingleEntityChangeSet($meta, $entity);                  
}
我不明白的是为什么
AddressManager
应该在名称空间链中?由于它不是一个实体,当逐步通过代码时,代码会进入
地址管理器

我该如何解决这个问题

编辑

还添加了lotlong函数

 public function getLatLong(LifecycleEventArgs $args) {

        $entity = $args->getEntity();

        if ($entity instanceof \Bla\OrmBundle\Entity\Address) {

            $geocoder = $this->container->get('ivory_google_map.geocoder');
            $string = $entity->getStreet() . ' ' . $entity->getStreetNumber() . ', ' . $entity->getCity() . ' ' . $entity->getCountry();
            $response = $geocoder->geocode($string);
            $results = $response->getResults();

            $entity->setLatitude(null);
            $entity->setLongitude(null);

            foreach ($results as $result) {
                $location = $result->getGeometry()->getLocation();

                $entity->setLatitude($location->getLatitude());
                $entity->setLongitude($location->getLongitude());
                return $entity;
            }
        }
    }

如果您的
getLatLong
不是
\Bla\OrmBundle\entity\Address
的实例,则它不会返回实体,这意味着它本质上是返回
null

这意味着当您稍后打电话时

$meta = $em->getClassMetadata(get_class($entity));
。。它真的在召唤

$meta = $em->getClassMetadata(get_class($entity));
$meta=$em->getClassMetadata(get_类(null))

。。这意味着它将返回调用它的类的名称,在本例中为
Bla\OrmBundle\EventListener\AddressManager

排序的方法有很多,但最简单的是

public function preUpdate(LifecycleEventArgs $args) {
    if (null === $entity = $this->getLatLong($args)) {
        return;
    }
    $em = $args->getEntityManager();
    ....                  
}

你能展示你的
getLatLong()
方法吗?@Qoop也添加了这个函数哦!太明显了!谢谢