2012-04-25 2 views
1

Symfony2에서 SensioGeneratorBundle을 사용하여 CRUD와 엔티티를 생성했습니다. 생성 된 CRUD를 REST API로 변환 중입니다. 필자는 필드 이름에 문제가 있습니다 ... 사용자 정의 필드 이름을 원했지만 Symfony의 bindRequest는 "acme_demobundle_tabletype_field"가 올바르게 작동하고 유효성을 검사하기 위해 "필드"만 갖고 싶어합니다.Symfony 2의 REST 컨트롤러 : 필드 이름 다루는 방법?

사용자 정의 필드 이름으로 POST하고 컨트롤러가 올바른 값을 이해하고 바인드하도록하려면 어떻게해야합니까? 예를 들면 :

POST

A : 바나나

B : 초콜릿

심포니지도 :

A => 제목

B => 내용

+0

. 내가 찾은 가장 가까운 사용자 지정 [param 변환기] (http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html)를 만드는 것입니다. –

답변

5

귀하의 질문에 두 부분이 있습니다. 먼저 필드 이름과 필드 이름 앞에 접두어가 붙습니다.

접두사를 제거하려면 2.1 인 경우 @ m2mdas에서 설명한 트릭을 사용하십시오. 2.1이 아닌 경우 createNamed을 사용하여 양식을 만들고 양식을 만들 때 빈 이름을 지정하는 것이 가장 좋습니다. 이런 식으로 뭔가 :

$this->formFactory->createNamed(new CustomType(), '', $data, $optionsArray); 

2.0.x에서이 양식을 테스트 없지만 갖는 빈 이름 필드의 접두사를 제거하는 것이 2.1에서 확인할 수 있습니다 마십시오.

여기에서 formFactoryFormFactory 서비스 (@form.factory)의 인스턴스입니다.

필드의 경우 사용자 정의 이름을 사용하여 Symfony에게 속성을 매핑해야하는 위치를 지정할 수 있습니다. 이를 위해서는 property_path 옵션을 사용하십시오. 이것은 symfony가 기본 경로 대신이 경로에 속성을 매핑하도록 지시합니다. 다음은 유형을 형성 당신이 그것을 정의 할 때 당신이 그것을 사용하는 방법 : 심포니는 POST 데이터에서 필드 a을받은 때 사용

public function buildForm(FormBuilder $builder, array $options) 
{ 
    $builder->add('a', 'text', array(
     'property_path' => 'title', 
    )); 

    $builder->add('b', 'text', array(
     'property_path' => 'content', 
    )); 
} 

은, 그것은 재산 title와 그 반대를에 매핑됩니다 양식이 렌더링됩니다. 개체에는 setTitle 메서드와 setContent 메서드가 필요합니다.

희망이 도움이됩니다. 나도 몰라

감사합니다,
매트

+0

놀라운 매트, 고마워. 내 REST 컨트롤러에서 Forms를 거의 없애고 유효성 검사를 손으로하고있었습니다. 감사! :디 – vinnylinux

1

I 기저귀를 들여다 보았다. this PR에 따르면 빈 부모 이름을 설정할 수 있습니다. 그래서 귀하의 양식 형식 클래스에서 단지 getName 메서드에서 빈 문자열을 반환합니다.

+0

내 이름이 유효하지 않다고 말합니다. 나는 돌아올거야. – vinnylinux

+0

2.1 버전을 사용하고 있습니까? –

+0

다른 필드 이름과 사용자 지정 매핑을 사용하는 방법이 없습니까? – vinnylinux

관련 문제