php - Gedmo Timestampable(更新创建时)

标签 php symfony orm doctrine-orm

我有一个奇怪的问题 DoctrineExtensions Bundle .

我完成安装,没有收到任何错误。

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

实体:

 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 ] ]

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

最佳答案

您的配置似乎正确。那么你确定已经导入了你的doctrine_extensions.yml

你应该有这样的东西:

在app/config/config.yml中:

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

关于php - Gedmo Timestampable(更新创建时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24823055/

相关文章:

php - PDO 数据库不向数据库中添加项目

php - 在 laravel 的自定义路径中创建模型

javascript - 使用ajax、jquery和symfony2在表中显示数组数据

android - 使用 Retrofit 进行修补 - 仅限 ID 属性

.NET - ORM 和所有可能的组合 - ViewModel?

php - 禁用购物车中的结账按钮 - php

php - 关于用 PHP 解析 OPML 文件以便我可以将地址导入 mySql 数据库的任何建议?

java - Hibernate 更新查询问题

Symfony 2 无法生成新包

php - Symfony 2 - 顶部菜单未出现在 Sonata admin 中