在持久之前将表单数据绑定到变量-Symfony2 / Doctrine2

道格

目前,我正在尝试将用户选择的选项绑定到变量,然后在持久存储数据之前在函数中使用该变量。

我当前的实体代码是这样的:

public function setUnit($unit)
{
    $this->unit = $unit;
    return $this;
}
public function getUnit()
{
    return $this->unit;
}
public function setSize($size)
{        
    $unit = $this->getUnit();
    $this->size = $size = new Mass($size, $unit);
    $this->size = $size->toUnit('mg');      
    return $this;
}

和我的形式:

    $builder
        ->add('size')
        ->add('unit')
        ;

最后是我的控制器:

 public function createAction(Request $request)
 {
    $entity = new Products();

    $form = $this->createCreateForm($entity);
    $form->handleRequest($request);


    if ($form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $entity->setUser($this->get('security.context')->getToken()->getUser());
        $em->persist($entity);
        $em->flush();

还有很多代码,但是我已经删除了所有不相关的东西。

所以。基本上我想做的是:

  1. 用户输入“大小和单位”(例如100克),然后单击“提交”。
  2. 新质量($ size,$ unit); 将$ size按$ unit转换为Mg
  3. 现在,数据将保存到数据库中。

如果我自己指定set $ unit变量,它可以正常工作($ unit ='g'),但是当我尝试通过$ this-getUnit传递单位时;没有发送任何内容,而将$ unit变量保留为null。

  Unknown unit of measure ()

如果我尝试这样做但更新现有条目,则可以正常工作,但始终落后一步,例如:

因此,如果在数据库中设置了它的“ g”,而我尝试转换为“ oz”,它将转换为“ G”,然后在下一次尝试下,如果我说输入kg,它将由之前的oz转换。

我假设发生这种情况是因为表单有效,因此Symfony尝试保留该实体,但随后命中了新的Mass函数,该函数引发错误,因为尚未将其发送给$ unit变量。如何在持久性之前发送$ unit变量,以便将其转换为新的$ size。

现在和昨晚,我已经花了很多时间认真地做这件事,昨晚我醒来想了太多次,但现在我还是不能放弃,我感到如此亲近。

((我正在使用的单位转换器是https://github.com/triplepoint/php-units-of-measure/以防万一有人在想)

感谢Jenechka

public function setSize($size)
{
    $this->size = $size;       
    return $this;
}

/**
 * @ORM\PrePersist
 * @ORM\PreUpdate
 */
public function fixSize()
{
    $unit = $this->getUnit();
    $size = $this->getSize();

    $mass = new Mass($size, $unit);
    $this->size = $mass->toUnit('mg');      
}

并在我的orm.yml中

    lifecycleCallbacks:
    prePersist: [ setCreatedAtValue, fixSize ]
    preUpdate: [ setUpdatedAtValue, fixSize ]

现在快乐:)谢谢。

耶基斯

尝试在prePersist或preUpdate事件中“固定”大小

/**
 * @Entity
 * @HasLifecycleCallbacks
 */
class YourEntity {
    // ...

    public function setSize($size)
    {        
        $this->size = $size;
        return $this;
    }

    /**
     * @PrePersist
     * @PreUpdate
     */
    public function fixSize()
    {
        $unit = $this->getUnit();
        $size = $this->getSize();

        $mass = new Mass($size, $unit);
        $this->size = $mass->toUnit('mg');      
    }

或另一种方式

public function setUnit($unit)
{
    $this->unit = $unit;
    $this->updateSize();

    return $this;
}

public function setSize($size)
{        
    $this->size = $size;
    $this->updateSize();

    return $this;
}

public function updateSize()
{
    $unit = $this->getUnit();
    $size = $this->getSize();

    if ($unit && $size) {
        $mass = new Mass($size, $unit);
        $this->size = $mass->toUnit('mg');      
    }

    return $this;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Doctrine2 + Symfony2:在绑定到DQL查询之前强制转换值

来自分类Dev

Symfony2 Doctrine2 Oracle数据库NUMBER DEFAULT类型?

来自分类Dev

组,消息和位置之间的Symfony2 / Doctrine2数据库关系

来自分类Dev

symfony2 doctrine2:将select元素添加到现有实体

来自分类Dev

Symfony2 Doctrine2多对多将所有实体及其关系实体

来自分类Dev

如何在Symfony2 Doctrine2中将varchar设置为int类型?

来自分类Dev

在Symfony2中将Doctrine2实体侦听器注册为服务

来自分类Dev

Symfony2 Doctrine2多对多将所有实体及其关系实体

来自分类Dev

是否可以将存储在会话中的实体持久保存在Symfony2 + Doctrine2中?

来自分类Dev

Doctrine2在“ group by”之前的“ order by”

来自分类Dev

Doctrine2 Symfony2扩展实体在不同的包中但具有相同的数据库表名称

来自分类Dev

symfony2 doctrine2与实体的批处理错误

来自分类Dev

Symfony2,Doctrine2,MySql,查看表

来自分类Dev

Symfony2 + Doctrine2中的CakePHP模型行为?

来自分类Dev

使用QueryBuilder的Symfony2 / Doctrine2 innerJoin

来自分类Dev

symfony2 doctrine2与实体的批处理错误

来自分类Dev

在Symfony2上的Doctrine2 YML映射

来自分类Dev

Symfony2 Doctrine2使用集合-表演

来自分类Dev

列的总和-Doctrine2 / Symfony2

来自分类Dev

symfony2 doctrine2不刷新新实体

来自分类Dev

Symfony2,Doctrine2,实体映射

来自分类Dev

doctrine2 symfony2关系实体

来自分类Dev

将字段聚集到Doctrine2中的获取的对象

来自分类Dev

在Doctrine2中跳过相关实体的持久化

来自分类Dev

在Doctrine2中跳过相关实体的持久化

来自分类Dev

对象中的doctrine2内部联接数据

来自分类Dev

Doctrine2将'LIKE'添加到addOrderBy

来自分类Dev

Symfony2表单集合-

来自分类Dev

Symfony2表单处理

Related 相关文章

热门标签

归档