Symfony 2表单验证 - 扩展请求

时间:2014-05-13 14:28:55

标签: php validation symfony

我正在使用FOSRestBundle在Symfony中构建REST API。

在我的税务总监中,我有:

private function processForm(Request $request, Tax $tax )
{

    $form = $this->createForm(new TaxType(),$tax);

    $req = $request->request->all();


    $form->submit($req['tax']);



    if ($form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($tax);
        $em->flush();
        return $this->getTaxAction($tax->getId());
    }

    return array(
        'form' => $form,
        'request' => $request->request->all()
    );
}

此功能从POST和PUT函数调用。

TaxType

    class TaxType extends AbstractType
    {
            /**
         * @param FormBuilderInterface $builder
         * @param array $options
         */
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('createDate')
                ->add('writeDate')
                ->add('name')
                ->add('amount')
                ->add('active')
                ->add('createUid')
                ->add('writeUid')
                ->add('company')
            ;
        }
...

到目前为止它工作正常,但现在我在表格中添加了一些额外的列(并且是税务实体的自己),例如:哪个公司属于记录,创建日期。这不是来自客户端,而是设置在服务器端。 我如何添加例如createData?

我试过了

$req['tax']['createDate'] = new \DateTime("now");

但我得到: {"代码":400,"消息":"验证失败","错误":{"儿童": {" createDate":{"错误":["此值无效。"],"儿童":{&#34 ;日期":{"儿童":{"一年":[],"当月":[],"天&#34 ;: []}}"时间" {"的子" {"小时":[],"分钟":[]}} }}" writeDate":{"儿童":{"日期":{"儿童":{"一年&#34 ;:[],"一个月":[],"天":[]}}"时间" {"子&#34 ;: {"小时":[],"分钟":[]}}}}"名称":[],"量&#34 ;: [],"有源":[]," createUID所":[]," writeUid":[],"公司":[] }}}

来自实体Tax.php

/ **  * @var \ DateTime  * / private $ createDate;

我想我正在使用正确的数据类型扩展请求,但我得到验证错误。

2 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题,您不必接受请求,只需更改$ tax-object上的属性即可。 如果需要,您也可以在表单验证后执行此操作。

答案 1 :(得分:1)

您可以从表单构建器中删除add('createDate')

  

$助洗剂
  <删除> - &gt;添加( 'CREATEDATE')
   - &gt;添加( 'writeDate')
   - &gt;添加( '姓名')
   - &gt;添加( '量')
   - &gt;添加( '激活')
   - &gt;添加( 'createUID所')
   - &gt;添加( 'writeUid')
   - &gt; add('company')

然后在持久化之前在$ tex对象上设置createdDate值。

if ($form->isValid()) {
    $tax->setCreateDate(new \DateTime("now"));
    $em = $this->getDoctrine()->getManager();
    $em->persist($tax);
    $em->flush();
    return $this->getTaxAction($tax->getId());
}

替代方法

或者您可以使用Doctrine's Lifecycle Callbacks来实现此目标。

快乐的编码!!