Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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 Symfony原则YAML映射生命周期回调:prePersist_Php_Symfony_Doctrine Orm_Doctrine_Yaml - Fatal编程技术网

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

Php Symfony原则YAML映射生命周期回调:prePersist,php,symfony,doctrine-orm,doctrine,yaml,Php,Symfony,Doctrine Orm,Doctrine,Yaml,所以我对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\Use

所以我对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;
    }
}
实体:

# 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;
    }
}

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

您可以在setter中创建自己的覆盖,因此永远无法设置它

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

    return $this;
}

正如user3442077所说,如果检查字段的值,则只能设置一次。
如果对象被一个值覆盖,那么即使你用一个值调用它,setter也不会做任何事情。

但是有人仍然可以访问该setter,我希望它只设置一次值。@OliverBS在setter内部进行检查
如果($this->dateJoined!=null)
,但我仍然可以传递它一些东西,我可以把今天的日期传过去。我知道它不会使用该日期,但我不希望日期覆盖,我想知道在doctrine YAML mapper中是否有方法告诉它不要使用setter@OliverBS可能会为PrePersist回调创建一个新的setter?这是我唯一的选择,为PrePersist创建新的setter并删除旧的setter,但这是一个手动过程,我的问题是,如果有人重新运行映射器,我将丢失它