gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 17:03:52 25 4
gpt4 key购买 nike

我可以设置一个简单的默认值,例如字符串或 bool 值,但我找不到如何设置实体的默认值。

在我的 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 的正确方法是什么?

最佳答案

我认为你最好将其设置在 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);
}
}
}

关于Symfony2 - 在实体构造函数中设置默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20304448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com