0

首先感谢您阅读并尝试帮助我。我是symfony的新手。

我有一个具有 FechaAlta (SingUpDate) 属性的实体。我想保存用户的更新日期

/**
 * @var date
 *
 * @ORM\Column(name="fechaAlta", type="datetime")
 */
private $fechaAlta;

/**
 * Set fechaAlta
 *
 * @return Promotor
 */
public function setFechaAlta()
{
    $this->fechaAlta = new \DateTime('now');

    return $this;
}

我想知道在表单上没有隐藏字段的情况下保存此日期的最佳方法是什么。

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('nombre')
        #->add('slug')
        ->add('fechaAlta')
    ;
}

我尝试删除表单字段“fechaAlta”,但不断收到以下错误

An exception occurred while executing 'INSERT INTO Promotor (nombre, slug, fechaAlta) VALUES (?, ?, ?)' with params {"1":"Prueba","2":"prueba","3":null}:

SQLSTATE [23000]:违反完整性约束:1048 列 'fechaAlta' 不能为空

在 newAction() 我调用 $promotor->setFechaAlta(); 那应该保存当前日期。

public function newAction()
{
    $promotor = new Promotor();

    $promotor->setFechaAlta();

    $form   = $this->createForm(new PromotorType(), $promotor);

    return $this->render('PromotorBundle:Promotor:new.html.twig', array(
        'entity' => $promotor,
        'form'   => $form->createView(),
    ));
}

太感谢了

4

2 回答 2

2

您可以使用@Lighthart 解决方案,也可以使用您的实体构造函数。
使用实体构造函数的好处是,如果您在第二个控制器/动作中创建这种类型的对象并希望保持相同的行为,则无需重复自己。

//Your entity code
/**
 * @var date
 *
 * @ORM\Column(name="fechaAlta", type="datetime")
 */
private $fechaAlta;

public function __construct()
{
    $this->fechaAlta = new \DateTime('now');
}

不要忘记从表单中删除该字段:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('nombre');
}
于 2013-04-22T18:56:30.140 回答
0

默认的 symfony 模式是 newAction 创建一个发布到 createAction 的表单。

createAction 是您应该设置日期的地方:

public function createAction( Request $request, $id ) {
    $promotor = new Promotor();
    $promotor->setFechaAlta();

    $form   = $this->createForm(new PromotorType(), $promotor);
    $form->bind( $request );

    if ( $form->isValid() ) {
        $this->getDoctrine()->getManager()->persist( $promotor );
        $this->getDoctrine()->getManager()->flush();

    return $this->redirect( 
        $this->generateUrl( 'promotor_show', array( 'id' => $promotor->getId() ) ) 
        );
    }

    return $this->render( 'PromotorBundle:Promotor:new.html.twig'
        , array(
        )
    );
}
于 2013-04-22T17:57:12.080 回答