2011-11-05 3 views
7

symfony2 FormValidator 구성 요소에서 클라이언트 측 폼 검증을 작성하는 것이 매우 유용하다고 생각합니다.Symfony2에서 클라이언트 측과 서버 측 검증을 결합하여 생성

이 작업을 수행하는 가장 좋은 방법은 유효성 검사 제약 조건을 양식보기에 전달하는 것입니다. 정보와 는 이런 일에 양식 필드를 렌더링하는 템플릿을 만들 수있을 것입니다 :

<div> 
    <label for="form_email">E-Mail</label> 
    <input 
     id="form_email" type="text" name="form[email]" value="" 
     data-validation-constraints='{"NotBlank":{},"MinLength":{"limit":6}}' 
    /> 
</div> 

자바 스크립트 부분은 다음 data-validation-constraints 속성이있는 모든 <input> 요소를 찾아 정확한 검증을 생성하는 것입니다 그들을 위해.

양식보기에 유효성 제한 조건을 전달하려면 양식 유형 확장을 만드는 것이 가장 좋은 방법이라고 생각했습니다. 그게 내 질문의 요점이다. 이것이 올바른 방법일까요? 그리고 이것은 어떻게 가능합니까? 순간

내 폼 타입의 확장은 다음과 같습니다

use Symfony\Component\Form\FormInterface; 
use Symfony\Component\Form\FormView; 
use Symfony\Component\Form\FormBuilder; 

class FieldTypeExtension extends \Symfony\Component\Form\AbstractTypeExtension{ 

    public function getExtendedType(){ 
     return 'field'; 
    } 

    public function buildView(FormView $view, FormInterface $form) 
    { 
     // at this point i didn't find a way to get the 
     // validation constraints out of the $form 
     // the `getAllValidationConstraints` here is just an example 
     $view->set('validation_constraints', $form->getAllValidationConstraints()); 
    } 

} 

어떻게 내가 FormInterface 개체에서 하나 개의 양식 필드에 적용된 모든 검증 제약을받을 수 있나요?

+0

하지만 매우 다른 방법으로 폼 타입의 제약을 변환 새로운 심포니 2 번들입니다. 현재 엔티티의 주석에 정의 된 제약 조건에서만 작동합니다. 어디에서 왔는지에 관계없이 모든 제약 조건을 원합니다. 'isValid' 메서드가 사용하는 것과 같은 메커니즘을 사용하여 constaints를 찾고 싶습니다. – ausi

답변

0

당신은 뭔가 더 간단 작업을 수행 할 수 있습니다

FieldType 이미 직접 볼 수 ATTR VAR로 전달되는 폼에 ATTR 속성을 전달합니다. 이 attr 양식을 수정하여 데이터 유효성 검증 제한 속성을 추가하는 것이 더 좋았습니다. 새 var를 처리하기 위해 양식 테마를 사용자 정의해야하는 필요성이 없기 때문입니다.

<?php 

namespace MyBundle\Form\Type; 

use Symfony\Component\Form\AbstractTypeExtension; 
use Symfony\Component\Form\FormBuilder; 

class FieldTypeJsValidationExtension extends AbstractTypeExtension 
{ 
    public function buildForm(FormBuilder $builder, array $options) 
    { 
     $attr = $builder->getAttribute('attr'); 
     $attr = array_merge(
      array(
       'data-validation-constraints' => $this->aMethodThatRenderTheFinalContentOfTheValidationAttribute(), 
      ), 
      $builder->getAttribute('attr') 
     ); 

     $builder->setAttribute('attr', $attr); 
    } 

    public function getExtendedType() 
    { 
     return 'field'; 
    } 

} 
+0

buildForm 메서드를 사용하고 있습니다. 이 시점에서 FormInterface 객체에 대한 참조가 없습니다. 현재 폼 필드의 모든 제약 조건을 얻으려면이 개체에 대한 참조가 필요하다고 생각합니다. 하지만 확실하지 오전 ... 내 질문은 FormInterface 개체 밖으로 한 양식 필드에 적용된 모든 유효성 검사 제약을 얻는 방법 – ausi

2

확인하는 것이 않는 SimpleThingsFormExtraBundle에 대한 참조 (또는 다발보다는 특정 오픈 PR)가 포함 된 해당 오픈 문제 "[Form] JavaScript validation".