ste*_*fun 1 forms bind symfony symfony-2.1 fosrestbundle
我正在使用FOSRestbundle实现rest API.现在说对于POST请求我正在获取请求参数,如:
Symfony\Component\HttpFoundation\ParameterBag Object
(
[parameters:protected] => Array
(
[rank] => 12
[city] => 1345
[comment]=> 'safd'
)
)
Run Code Online (Sandbox Code Playgroud)
我的帖子操作代码是:
/**
* @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));
}
Run Code Online (Sandbox Code Playgroud)
但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] =>
)
Run Code Online (Sandbox Code Playgroud)
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';
}
}
Run Code Online (Sandbox Code Playgroud)
验证将像城市一样抛出错误,等级不应为空
有什么建议为什么$form->bind不绑定价值?
小智 12
我想,我刚刚在我的应用中解决了同样的问题:)
看看你的表单:getName()方法返回'rank' - 这是表单的名称AND这是这个表单数据的命名空间:) Symfony2将使用它来绑定.
那么,当你发送这样的数据时:
array('rank'=> 'somevalue', 'city' => 'comecityname', 'comment' => 'somecomment')
它不起作用,因为bind方法将搜索放置在'rank'命名空间下的数据数组,并找到字符串'somevalue'.表格数据将保持空白.
将数据格式更改为:
array('rank' => array('rank'=> 'somevalue', 'city' => 'comecityname', 'comment' => 'somecomment'))
Run Code Online (Sandbox Code Playgroud)
并使用REST发送它 - 然后它应该工作
我希望这个能帮上忙
| 归档时间: |
|
| 查看次数: |
6890 次 |
| 最近记录: |