首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用EventSubscriber服务在config.yml中声明bazinga_geocoder.geocoder?

如何使用EventSubscriber服务在config.yml中声明bazinga_geocoder.geocoder?
EN

Stack Overflow用户
提问于 2014-06-18 15:22:05
回答 1查看 217关注 0票数 0

我计划在BazingaGeocoderBundle的基础上进行逆向地理编码。这样做的一个简单方法是在控制器中编写以下简单代码:

代码语言:javascript
复制
    $result = $this->container
        ->get('bazinga_geocoder.geocoder')
        ->using('google_maps')
        ->reverse(48.79084170157100,2.42479377175290);
    return $this->render("MinnAdsBundle:Motors:test.html.twig",
            array('result'=>var_dump($result))); 

在此之前,一切都很顺利。

我的目标是使代码更好和更可修复。因此,我使用这个文章编写了自己的GeocoderEventSubscriber,如下所示:

代码语言:javascript
复制
<?php

namespace Minn\AdsBundle\Doctrine\Event;

use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\PreUpdateEventArgs;
use Doctrine\ORM\Event\LifecycleEventArgs;
//use Geocoder\Provider\ProviderInterface;
use Bazinga\Bundle\GeocoderBundle\Geocoder\LoggableGeocoder;

/**
 * Subscribes to Doctrine prePersist and preUpdate to update an 
 * the address components of a MotorsAds entity
 * 
 * @author majallouli
 */
class MotorsAdsGeocoderEventSubscriber implements EventSubscriber {

    protected $geocoder;

    public function __construct(LoggableGeocoder $geocoder){
        $this->geocoder = $geocoder;
    }

    /**
    * Specifies the list of events to listen
    *
    * @return array
    */
    public function getSubscribedEvents(){
        return array(
            'prePersist',
            'preUpdate',
        );
    }

    /**
     * Sets a new MotorsAds's address components if not present 
     * 
     * @param LifecycleEventArgs $eventArgs 
     */
    public function prePersist(LifecycleEventArgs $eventArgs){
        $motorsAds = $eventArgs->getEntity();
        if($motorsAds instanceof \Minn\AdsBundle\Entity\MotorsAds){
            if( !$motorsAds->getCountry()){
                $em = $eventArgs->getEntityManager();
                $this->geocodeMotorsAds($motorsAds,$em);
            }
        }
    }

    /**
     * Sets an updating MotorsAds's address components if not present 
     * or any part of address updated
     * 
     * @param PreUpdateEventArgs $eventArgs 
     */
    public function preUpdate(PreUpdateEventArgs $eventArgs){
        $motorsAds = $eventArgs->getEntity();
        if($motorsAds instanceof \Minn\AdsBundle\Entity\MotorsAds){
             if( !$motorsAds->getCountry() ){
                $em = $eventArgs->getEntityManager();
                $this->geocodeMotorsAds($motorsAds,$em);

                $uow = $em->getUnitOfWork();
                $meta = $em->getClassMetadata(get_class($motorsAds));
                $uow->recomputeSingleEntityChangeSet($meta, $motorsAds);
            }
        }
    }

    /**
     * Geocode and set the MotorsAds's address components
     * 
     * @param type $motorsAds 
     */
    private function geocodeMotorsAds($motorsAds,$em){
        $result = $this->geocode
                ->using('google_maps')
                ->reverse($motorsAds->getLat(),$motorsAds->getLng());
        $motorsAds->setCountry(
                $em->getRepository("MinnAdsBundle:Country")->findCountryCode($result['countryCode']));
    }

}

之后,我将我的EventSubscriber声明为服务:

代码语言:javascript
复制
services:
    # ...
    geocoder_motorsads.listener:
        class:  Minn\AdsBundle\Doctrine\Event\MotorsAdsGeocoderEventSubscriber
        arguments: [@bazinga_geocoder.geocoder] # almost sure that the error is here!!
        tags:
            - { name: doctrine.event_subscriber }  

实际上,我得到了一个错误:

代码语言:javascript
复制
ContextErrorException: Notice: Undefined property: Minn\AdsBundle\Doctrine\Event\MotorsAdsGeocoderEventSubscriber::$geocode in /home/amine/NetBeansProjects/tuto/src/Minn/AdsBundle/Doctrine/Event/MotorsAdsGeocoderEventSubscriber.php line 78

我几乎可以肯定,错误发生在EventSubscriber的参数声明中。是@bazinga_geocoder.geocoder吗?

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-18 15:33:40

您的属性是$this->geocoder,但您正在调用$this->geocode,您拼写错误。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24289383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档