2014-07-18 29 views
1

我有一个奇怪的问题与DoctrineExtensions BundleGedmo Timestampable(在更新创建)

我完成安装,即时获取没有错误。

但我的“更新”和“创建”事件不起作用。

实体:

Use Gedmo\Mapping\Annotation as Gedmo; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* Price 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="pspiess\LetsplayBundle\Entity\PriceRepository") 
*/ 
class Price { 


    public function __construct() { 
     //$this->created = new \DateTime(); 
    } 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * 
    * @var \Doctrine\Common\Collections\ArrayCollection $fields 
    * 
    * @ORM\ManyToMany(targetEntity="pspiess\LetsplayBundle\Entity\Field", mappedBy="prices") 
    * */ 
    protected $fields; 
    protected $field; 

    /** 
    * @var decimal 
    * 
    * @ORM\Column(name="price", type="decimal", precision=9, scale=2) 
    */ 
    private $price; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="weekdayfrom", type="smallint", nullable=true) 
    */ 
    private $weekdayfrom; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="weekdayto", type="smallint", nullable=true) 
    */ 
    private $weekdayto; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="indentifier", type="string", length=255) 
    */ 
    private $indentifier; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="timefrom", type="time") 
    */ 
    private $timefrom; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="timeto", type="time") 
    */ 
    private $timeto; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="note", type="text", nullable=true) 
    */ 
    private $note; 

    /** 
    * @var datetime $created 
    * 
    * @Gedmo\Timestampable(on="create") 
    * @ORM\Column(type="datetime") 
    */ 
    private $created; 

    /** 
    * @var \DateTime 
    * @Gedmo\Timestampable(on="update") 
    * @ORM\Column(name="changed", type="datetime") 
    */ 
    private $changed; 

    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() { 
     return $this->id; 
    } 

    /** 
    * Set price 
    * 
    * @param integer $price 
    * @return Price 
    */ 
    public function setPrice($price) { 
     $this->price = $price; 

     return $this; 
    } 

    /** 
    * Get price 
    * 
    * @return integer 
    */ 
    public function getPrice() { 
     return $this->price; 
    } 

    /** 
    * Set weekdayfrom 
    * 
    * @param integer $weekdayfrom 
    * @return Price 
    */ 
    public function setWeekdayfrom($weekdayfrom) { 
     $this->weekdayfrom = $weekdayfrom; 

     return $this; 
    } 

    /** 
    * Get weekdayfrom 
    * 
    * @return integer 
    */ 
    public function getWeekdayfrom() { 
     return $this->weekdayfrom; 
    } 

    /** 
    * Set weekdayto 
    * 
    * @param integer $weekdayto 
    * @return Price 
    */ 
    public function setWeekdayto($weekdayto) { 
     $this->weekdayto = $weekdayto; 

     return $this; 
    } 

    /** 
    * Get weekday 
    * 
    * @return integer 
    */ 
    public function getWeekdayto() { 
     return $this->weekdayto; 
    } 

    /** 
    * Set indentifier 
    * 
    * @param string $indentifier 
    * @return Price 
    */ 
    public function setIndentifier($indentifier) { 
     $this->indentifier = $indentifier; 

     return $this; 
    } 

    /** 
    * Get indentifier 
    * 
    * @return string 
    */ 
    public function getIndentifier() { 
     return $this->indentifier; 
    } 

    /** 
    * Set timefrom 
    * 
    * @param \DateTime $timefrom 
    * @return Price 
    */ 
    public function setTimefrom($timefrom) { 
     $this->timefrom = $timefrom; 

     return $this; 
    } 

    /** 
    * Get timefrom 
    * 
    * @return \DateTime 
    */ 
    public function getTimefrom() { 
     return $this->timefrom; 
    } 

    /** 
    * Set timeto 
    * 
    * @param \DateTime $timeto 
    * @return Price 
    */ 
    public function setTimeto($timeto) { 
     $this->timeto = $timeto; 

     return $this; 
    } 

    /** 
    * Get timeto 
    * 
    * @return \DateTime 
    */ 
    public function getTimeto() { 
     return $this->timeto; 
    } 

    /** 
    * Set note 
    * 
    * @param string $note 
    * @return Price 
    */ 
    public function setNote($note) { 
     $this->note = $note; 

     return $this; 
    } 

    /** 
    * Get note 
    * 
    * @return string 
    */ 
    public function getNote() { 
     return $this->note; 
    } 

    /** 
    * Get created 
    * 
    * @return \DateTime 
    */ 
    public function getCreated() { 
     return $this->created; 
    } 

    /** 
    * Set changed 
    * 
    * @param \DateTime $changed 
    * @return Price 
    */ 
    public function setChanged($changed) { 
     $this->changed = $changed; 

     return $this; 
    } 

    /** 
    * Get changed 
    * 
    * @return \DateTime 
    */ 
    public function getChanged() { 
     return $this->changed; 
    } 

    /** 
    * Add field 
    * 
    * @param \pspiess\LetsplayBundle\Entity\Field $field 
    * @return Price 
    */ 
    public function addField(\pspiess\LetsplayBundle\Entity\Field $field) { 
     $this->fields[] = $field; 

     return $this; 
    } 

    /** 
    * Remove field 
    * 
    * @param \pspiess\LetsplayBundle\Entity\Field $field 
    */ 
    public function removeField(\pspiess\LetsplayBundle\Entity\Field $field) { 
     $this->fields->removeElement($field); 
    } 

    /** 
    * Get field 
    * 
    * @return \Doctrine\Common\Collections\Collection 
    */ 
    public function getField() { 
     return $this->fields; 
    } 

    /* 
    * @return string 
    */ 

    public function __toString() { 
     return $this->getIndentifier(); 
    } 

} 

我Config.yml

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

    mappings: 
     translatable: 
      type: annotation 
      alias: Gedmo 
      prefix: Gedmo\Translatable\Entity 
      # make sure vendor library location is correct 
      dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Translatable/Entity" 
     loggable: 
      type: annotation 
      alias: Gedmo 
      prefix: Gedmo\Loggable\Entity 
      dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Loggable/Entity" 
     tree: 
      type: annotation 
      alias: Gedmo 
      prefix: Gedmo\Tree\Entity 
      dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Tree/Entity" 

我doctrine_extensions.yml

services: 
    # KernelRequest listener 
    extension.listener: 
     class: pspiess\AppBundle\Listener\DoctrineExtensionListener 
     calls: 
      - [ setContainer, [ @service_container ] ] 
     tags: 
      # translatable sets locale after router processing 
      - { name: kernel.event_listener, event: kernel.request, method: onLateKernelRequest, priority: -10 } 
      # loggable hooks user username if one is in security context 
      - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest } 


    # Doctrine Extension listeners to handle behaviors 
    gedmo.listener.tree: 
     class: Gedmo\Tree\TreeListener 
     tags: 
      - { name: doctrine.event_subscriber, connection: default } 
     calls: 
      - [ setAnnotationReader, [ @annotation_reader ] ] 

    gedmo.listener.translatable: 
     class: Gedmo\Translatable\TranslatableListener 
     tags: 
      - { name: doctrine.event_subscriber, connection: default } 
     calls: 
      - [ setAnnotationReader, [ @annotation_reader ] ] 
      - [ setDefaultLocale, [ %locale% ] ] 
      - [ setTranslationFallback, [ false ] ] 

    gedmo.listener.timestampable: 
     class: Gedmo\Timestampable\TimestampableListener 
     tags: 
      - { name: doctrine.event_subscriber, connection: default } 
     calls: 
      - [ setAnnotationReader, [ @annotation_reader ] ] 

    gedmo.listener.sluggable: 
     class: Gedmo\Sluggable\SluggableListener 
     tags: 
      - { name: doctrine.event_subscriber, connection: default } 
     calls: 
      - [ setAnnotationReader, [ @annotation_reader ] ] 

    gedmo.listener.sortable: 
     class: Gedmo\Sortable\SortableListener 
     tags: 
      - { name: doctrine.event_subscriber, connection: default } 
     calls: 
      - [ setAnnotationReader, [ @annotation_reader ] ] 

    gedmo.listener.loggable: 
     class: Gedmo\Loggable\LoggableListener 
     tags: 
      - { name: doctrine.event_subscriber, connection: default } 
     calls: 
      - [ setAnnotationReader, [ @annotation_reader ] ] 

我不知道我在做什么错在这里...

回答

1

几个小时后,我有一个解决方案我的问题。我发现命令模式:更新不能正常工作,所以我尝试修复它。

当我删除Bundle/Resources/config/doctrine目录中的* .orm.xml文件时,一切正常。我认为当你使用xml和注释配置时Symfony有问题...

不太确定文件如何到达那里,因为我只有注释配置。 我认为它的原因是:mapping:import命令。该命令将现有数据库的模式存储到.orm.xml文件中。

1

你的配置似乎正确的。所以,你一定要我们已将您doctrine_extensions.yml

你应该有这样的事情:

在应用程序/配置/ config.yml:

imports: 
    - { resource: parameters.yml } 
    - { resource: security.yml } 
    - { resource: doctrine_extensions.yml } 
+0

是的,我确定。我试图直接写入config.yml,但我得到了相同的结果...有没有我的方式来调试呢? – psiess