Forms 表格绑定不绑定Symfony 2.1和x2B中的表格请求;FOSRestBundle

Forms 表格绑定不绑定Symfony 2.1和x2B中的表格请求;FOSRestBundle,forms,symfony,bind,symfony-2.1,fosrestbundle,Forms,Symfony,Bind,Symfony 2.1,Fosrestbundle,我正在使用FOSRestbundle实现restapi。现在假设对于POST请求,我正确地获取了请求参数,如: Symfony\Component\HttpFoundation\ParameterBag Object ( [parameters:protected] => Array ( [rank] => 12 [city] => 1345 [comment]=> 'safd

我正在使用FOSRestbundle实现restapi。现在假设对于POST请求,我正确地获取了请求参数,如:

Symfony\Component\HttpFoundation\ParameterBag Object
(
    [parameters:protected] => Array
        (
            [rank] => 12
            [city] => 1345
            [comment]=> 'safd'
        )

)
我的行动后代码是:

/**
 * @Rest\View
 */   
public function newAction(){

    $rank= new Rank();       
    $form = $this->createForm(new RankType(), $rank);
    $form->bind($this->getRequest());
    if ($form->isValid()) {
      //.  $user->flush();

      $em = $this->getDoctrine()->getManager();
      $em->persist($rank);
      $em->flush();
      $response = new Response();
      $response->setStatusCode($statusCode);
      $view = View::create()  
        ->setData($rank)
        ->setFormat('json');

      return $this->handleView($view);
    }

    return $this->handleView(View::create($form, 400));
}
但是
form->isValid
由于将null值设置为form而失败

After Binding form form->getData() will display :


MyProject\DataBundle\Entity\Rank Object
(
    [city:MyProject\DataBundle\Entity\Ranking:private] => 
    [rank:MyProject\DataBundle\Entity\Ranking:private] => 
    [comment:MyProject\DataBundle\Entity\Ranking:private] => 
)   
RankType代码:

class RankType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('rank');
        $builder->add('city');
        $builder->add('comment');
    }

    /**
     * {@inheritdoc}
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class'        => 'Myporject\DataBundle\Entity\rank',
            'csrf_protection'   => false,
        ));
    }

    /**
     * {@inheritdoc}
     */
    public function getName()
    {
        return 'rank';
    }
}
验证将抛出类似city和rank不应为null的错误


有什么建议说明为什么
$form->bind
不绑定值吗?

我想,我刚刚在我的应用程序中解决了同样的问题:)

查看表单:getName()方法返回'rank'——这是表单的名称,这是表单数据的命名空间:)Symfony2将使用它绑定

因此,当您发送这样的数据时:

array('rank'=>'somevalue','city'=>'comecityname','comment'=>'somecomment')

它将不起作用,因为bind方法将搜索放置在“rank”命名空间下的数据数组,并将查找字符串“somevalue”。表单数据将保持为空

将数据格式更改为:

array('rank' => array('rank'=> 'somevalue', 'city' => 'comecityname', 'comment' => 'somecomment'))
把它和其他东西一起送去,这样它就可以工作了


我希望这会有所帮助

我想,我刚刚在我的应用程序中解决了同样的问题:)

查看表单:getName()方法返回'rank'——这是表单的名称,这是表单数据的命名空间:)Symfony2将使用它绑定

因此,当您发送这样的数据时:

array('rank'=>'somevalue','city'=>'comecityname','comment'=>'somecomment')

它将不起作用,因为bind方法将搜索放置在“rank”命名空间下的数据数组,并将查找字符串“somevalue”。表单数据将保持为空

将数据格式更改为:

array('rank' => array('rank'=> 'somevalue', 'city' => 'comecityname', 'comment' => 'somecomment'))
把它和其他东西一起送去,这样它就可以工作了


我希望这将有助于

请发布您的表单类RankType()。请发布您的表单类RankType()。我有同样的问题,并且按照您在回答中描述的那样做,但我也有同样的问题。对进一步调试有什么建议吗?我和你的建议一样,也在这里提到过;但产出仍然是一样的。表单和请求没有绑定。这对我来说很有效:$jsonData=json_decode($request->getContent(),true);//“真”得到一个关联数组我有同样的问题,并且按照你在答案中描述的那样做,但我也有同样的问题。对进一步调试有什么建议吗?我和你的建议一样,也在这里提到过;但产出仍然是一样的。表单和请求没有绑定。这对我来说很有效:$jsonData=json_decode($request->getContent(),true);//“true”以获取关联数组