Forms 表格绑定不绑定Symfony 2.1和x2B中的表格请求;FOSRestBundle
我正在使用FOSRestbundle实现restapi。现在假设对于POST请求,我正确地获取了请求参数,如: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
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”以获取关联数组