Symfony原则YAML映射生命周期:prePersist


Symfony doctrine YAML mapping lifecycleCallbacks:prePersist

所以我是新的学说YAML映射和我不确定的东西。基本上,我有下面的YAML文件,我已经为您剥离,以及生成的实体文件。

YAML:

# src/ACME/Base/UserBundle/Resources/config/doctrine/User.orm.yml
ACME'UserBundle'Entity'User:
    table: fos_user
    type:  entity
    repositoryClass: ACME'UserBundle'Repository'User
    id:
        id:
            type: integer
            generator:
                strategy: AUTO
    fields:
        firstName:
            type: string
            length: 30
            column: first_name
            nullable: false
        lastName:
            type: string
            length: 50
            column: last_name
            nullable: false
        dateJoined:
            type: datetime
            column: date_joined
            nullable: false   
实体:

<?php
namespace ACME'UserBundle'Entity;
use Doctrine'ORM'Mapping as ORM;
/**
 * User
 */
class User
{
    /**
     * @var integer
     */
    private $id;
    /**
     * @var string
     */
    private $firstName;
    /**
     * @var string
     */
    private $lastName;
    /**
     * @var 'DateTime
     */
    private $dateJoined;

    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }
    /**
     * Set firstName
     *
     * @param string $firstName
     * @return User
     */
    public function setFirstName($firstName)
    {
        $this->firstName = $firstName;
        return $this;
    }
    /**
     * Get firstName
     *
     * @return string 
     */
    public function getFirstName()
    {
        return $this->firstName;
    }
    /**
     * Set lastName
     *
     * @param string $lastName
     * @return User
     */
    public function setLastName($lastName)
    {
        $this->lastName = $lastName;
        return $this;
    }
    /**
     * Get lastName
     *
     * @return string 
     */
    public function getLastName()
    {
        return $this->lastName;
    }
    /**
     * Set dateJoined
     *
     * @param 'DateTime $dateJoined
     * @return User
     */
    public function setDateJoined($dateJoined)
    {
        $this->dateJoined = $dateJoined;
        return $this;
    }
    /**
     * Get dateJoined
     *
     * @return 'DateTime 
     */
    public function getDateJoined()
    {
        return $this->dateJoined;
    }
}

所以我的问题是我可以添加以下内容以便在保存之前设置dateJoined:

lifecycleCallbacks:
        prePersist: [ setDateJoinedInsert ]

然而,我的问题是,因为我已经创建了列,我也生成了一个mutator (setter),这意味着有人可以覆盖dateJoined值,我不想这样做。那么,有没有一种方法不自动生成一个mutator,或者我必须从实体文件中删除它?我所遇到的问题是,如果有人对YAML文件进行更改并重新生成实体文件,则将再次创建mutator。

你可以在setter中创建自己的重写,这样它就永远不会被设置。

public function setDateJoined($dateJoined)
{
    $this->dateJoined = new 'DateTime('now');
    return $this;
}

就像user3442077说的,如果你检查你的字段的值,你将只能设置一次。如果对象中有一个值,那么setter就不会做任何事情,即使你用一个值调用它。