-->

形式绑定不绑定请求,以形成的Symfony 2.1 + FOSRestBundle(Form bin

2019-10-17 08:31发布

我使用FOSRestbundle实现REST API。 现在对于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失败,因为设置空值形成。

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';
    }
}

验证将抛出错误,如城市和排名不能为空

任何建议,为什么$form->bind不具约束力的值?

Answer 1:

我认为,我刚刚解决了我的应用程序相同的问题:)

看看你的形式:getName()方法返回“排名” - 这是形式的名称,这是该表单数据的命名空间:)的Symfony2将用它来绑定。

所以,当你将发送这样的数据:

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

它不会工作,因为绑定方法将搜索下“排名”命名空间放置数据的阵列,并会找到字符串“someValue中”。 表格数据将保持为空。

更改数据到的格式:

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

与REST发送 - 那么它应该工作

我希望这个能帮上忙



文章来源: Form bind not binding request to form in Symfony 2.1+FOSRestBundle