Symfony2 - 在实体构造函数中设置默认值

 bv方法_484 发布于 2023-02-13 17:06

我可以设置一个简单的默认值,如字符串或布尔值,但我找不到如何为实体设置defualt.

在我的User.php实体中:

/**
* @ORM\ManyToOne(targetEntity="Acme\DemoBundle\Entity\Foo")
*/
protected $foo;

在构造函数中,我需要为$ foo设置一个默认值:

public function __construct()
{
    parent::__construct();

    $this->foo = 1; // set id to 1
}

期望一个Foo对象,它传递一个整数.

设置默认实体ID的正确方法是什么?

1 个回答
  • 我认为你最好将它设置在一个PrePersist事件中.

    User.php:

    use Doctrine\ORM\Mapping as ORM;
    
    /**
    * ..
    * @ORM\HasLifecycleCallbacks
    */
    class User 
    {
             /**
             * @ORM\PrePersist()
             */
            public function setInitialFoo()
            {
                 //Setting initial $foo value   
            }
    
    }
    

    但是设置关系值不是通过设置整数来执行的id,而是通过添加实例来执行Foo.这可以在事件监听器内完成,而不是实体的LifecycleCallback事件(因为你必须调用Foo实体的存储库).

    首先,在捆绑services.yml文件中注册事件:

    services:
        user.listener:
            class: Tsk\TestBundle\EventListener\FooSetter
            tags:
                - { name: doctrine.event_listener, event: prePersist }
    

    FooSetter班级:

    namespace Tsk\TestBundle\EventListener\FooSetter;
    
    use Doctrine\ORM\Event\LifecycleEventArgs;
    use Tsk\TestBundle\Entity\User;
    
    class FooSetter
    {
        public function prePersist(LifecycleEventArgs $args)
        {
            $entity = $args->getEntity();
            $entityManager = $args->getEntityManager();
    
            if ($entity instanceof User) {
                $foo = $entityManager->getRepository("TskTestBundle:Foo")->find(1);
                $entity->addFoo($foo);
            }
        }
    }
    

    2023-02-13 17:08 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有