2012-10-31 2 views
1

FOSRestbundle을 사용하여 나머지 API를 구현하고 있습니다. 지금은 제대로 같은 요청 매개 변수를 받고 있어요 POST 요청에 대해 말 :양식 바인딩이 symfony 2.1 + FOSRestBundle 양식에 바인딩 요청이 아닙니다.

/** 
* @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)); 
} 

하지만 인해 형성 null 값을 설정하는 form->isValid 실패

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

) 

내 포스트 액션 코드입니다.

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하지 바인딩 값이 널 안 던질 것인가?

+0

이 양식 클래스 RankType을 게시 도움이되기를 바랍니다

작동합니다()하시기 바랍니다. –

+0

RankType()을 추가했습니다. – stefun

답변

12

은 난 그냥 내 응용 프로그램에서 같은 문제 : 양식에서

봐 해결했다고 생각 : getName() 메소드가 리턴 '순위'-이 양식의 이름이입니다 이 폼 데이터를위한 네임 스페이스 : Symfony2는 이것을 사용하여 바인딩합니다.

그래서, 때 그런 데이터를 전송합니다 : 바인드 방법은 '계급'네임 스페이스 아래에 위치 데이터의 배열을 검색하고 문자열 'someValue와'를 찾을 수 있기 때문에

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

그것은 작동하지 않습니다 . 양식 데이터가 비어있게됩니다. 그 데이터의

변경 형식 :

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

하고 REST와 함께 보내 - 그 때 나는이

+0

저는 똑같은 문제가있어서 답안에서 설명하는 것처럼 해봤지만 같은 문제가 있습니다. 추가 디버깅을위한 제안 사항은 무엇입니까? – wowpatrick

+0

나는 당신의 제안과 동일하게 여기에 언급했다. http://pedrogilcandeias.wordpress.com/2013/01/15/symfony2-rest-gotcha-unable-to-bind-a-request/하지만 여전히 출력은 같습니다. 양식과 요청은 구속력이 없습니다. – Geshan

+0

이것은 나를 위해 일했다 : $ jsonData = json_decode ($ request-> getContent(), true); // 연관 배열을 얻으려면 "true" –

관련 문제