2014-11-13 1 views
0

내 프로젝트에 비밀번호 재설정 페이지를 구현했습니다. 작동하지만 최선의 방법과 재사용 가능한 코드를 사용하려고합니다. 그래서 여기에 문제가 있습니다. 암호 재설정 양식과 재설정 제어기에 대한 FormType이 있습니다. 일반적으로 유효성을 검사한다는 것은 양식 유형의 필드를 클래스의 개체에 매핑하고이 개체의 속성에 대한 유효성 검사 규칙을 갖는 것을 의미합니다. 하지만 비밀번호 재설정을 위해 "매핑되지 않은"필드를 사용해야한다고 생각합니다. 지금은 양식을 제출하고 ResettingController에서 값을 가져옵니다. 이메일, 생일 및 보안 답변이있는 사용자가있는 경우 직접 확인합니다. 이것은 작동하지만 올바른 방법으로 구현되지 않았다고 생각합니다. 전체 ResetFormType에 사용자 지정 제약 조건을 추가 할 수 있으며 폼을 전송할 때 사용자가 있는지 확인하는 제약 조건을 호출해야합니다. 그래서 컨트롤러에 쓴 "if, else, if ..."가 아닌 Symfony Validation 시스템을 사용하고 싶습니다.Symfony 커스텀 제약 조건을 리셋 비밀번호 기능 양식

ResetPwFormType :

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
      ->add('username', null, array(
       'label' => 'resetting.request.username', 
       'translation_domain' => 'FOSUserBundle', 
       'mapped' => false 
      )) 
      ->add('birthday', 'date', array(
       'years' => range(date('Y') - 74, date('Y') - 18), 
       'label' => 'register.user.contact.birthdayBlank', 
       'translation_domain' => 'Startup', 
       'mapped' => false 
      )) 
      ->add('plainSecurityAnswer', 'text', array(
       'label' => 'register.user.security.answer', 
       'translation_domain' => 'Startup', 
       'mapped' => false 
      )); 
} 

ResettingController :

 $form = $this->container->get('form.factory')->create(new ResetPwFormType()); 
     $form->handleRequest($this->container->get('request')); 

     $username = $form->get('username')->getData(); 
     $birthday = $form->get('birthday')->getData(); 
     $securityAnswer = $form->get('plainSecurityAnswer')->getData(); 

     /** @var $user UserInterface */ 
     $user = $this->container->get('doctrine')->getRepository('UserBundle:User')->findUserForPasswordReset($username, $birthday, $securityAnswer); 

     $jsonReturn = array(); 

     if($user !== null) 
     { 
      // etc. 
     } 

내가 여기 사용하려는 "$ 형상 -> isValid()"여기

내 코드입니다 메소드에서 변수의 각 필드를 변수에 저장하지 않고 저장소 메소드에 전달하고 사용자가 수동으로 존재하는지 검사합니다. 그리고 그것을 위해, 나는 전체 형식에 대한 제약이 필요하다고 생각합니다 ..?

업데이트 : 리셋 프로세스를위한 모델 클래스가 필요하며이 전체 클래스에 사용자 정의 유효성 검사 제약 조건을 추가 할 수 있습니다.

감사합니다. 지금 리셋 양식 유형에 대해 "모델"클래스를 구현

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('username', null, array(
      'label' => 'resetting.request.username', 
      'translation_domain' => 'FOSUserBundle', 
      'mapped' => false, 
      'constraints' => [ 
       new YourCustomConstraint() 
      ] 
     )); 
} 

답변

0

당신은 폼 빌더에서 '제약'옵션을 사용할 수 있습니다. 속성 (username, birthday, securityAnswer)에 제약 조건을 추가 한 다음 클래스 자체에 제약 조건을 추가 할 수 있습니다.

+0

Ok 그러면이 제약 조건이 제가 ResetProcess를 위해 생성 한 "Model"클래스에 추가됩니다. 권리 ? –

+0

이 제약 조건을 통해 'username'필드의 값을 확인할 수 있습니다. 반드시 "Model"클래스에 추가하지 마십시오 – kapa89

-1

:

+0

왜 "-1"입니까? 그것을 처리하는 공식, 가장 좋은 방법은 무엇입니까?! 당신이 통보받지 못했다면 그것을 평가하지 마십시오. –

관련 문제