2016-09-02 4 views
0

Symfony 프로젝트에 FOSUserBundle을 설치했습니다. 이제 FOSUserBundle이 기본적으로 제공하는 등록 양식 필드를 제거하고 싶습니다.FOSUserBundle에서 양식 필드를 제거하는 방법 Symfony2.8?

등록 양식 필드는 다음과 같습니다

사용자 이름

이메일 ID

비밀번호

나는 사용자 Email 필드를 원하지 않는

이제

반복 비밀번호 등록하다 그래서 내 번들의 등록 양식을 오버라이드합니다.

\\ Front\FrontBundle\Form\RegistrationType.php 
<?php 
namespace Front\FrontBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 

class RegistrationType extends AbstractType 
{ 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->remove('email'); // here I code for remove email field. 
    } 



    public function getParent() 
    { 
    return 'FOS\UserBundle\Form\Type\RegistrationFormType'; 

    // Or for Symfony < 2.8 
    // return 'fos_user_registration'; 
    } 

    public function getBlockPrefix() 
    { 
    return 'app_user_registration'; 
    } 

    // For Symfony 2.x 
    public function getName() 
    { 
    return $this->getBlockPrefix(); 
    } 

} 

는 내가 config.yml 및 services.yml 파일을 변경

\\ App/config/config.yml 

fos_user: 
db_driver: orm 
firewall_name: main 
user_class: Front\FrontBundle\Entity\User 
registration: 
    form: 
     type: Front\FrontBundle\Form\RegistrationType 




\\app/config/services.yml 
services: 
app.form.registration: 
    class: Front\FrontBundle\Form\RegistrationType 
    tags: 
     - { name: form.type, alias: app_user_registration } 

내 등록 양식에서 제거하지만 username, password, repeat password를 작성 후 양식을 제출할 때의이 이메일 필드를 함께 할 그래서 후 The email is not valid에 오류가 있으면 알려주세요.

그래서 전자 메일 필드에서 전자 메일 유효성 검사를 제거하려면 다른 파일을 변경해야합니까?

감사합니다.

+0

는'email'는 FOSUser 당신이 확장에 제공하는 모델의 필수 필드입니다. 원하지 않으면 FOS \ UserBundle \ Model \ User를 확장하지 마십시오. – Federkun

+0

@Federico 자세히 설명해 주시겠습니까? 변경해야하는 파일은 무엇입니까? – Dhaval

+0

'email'은 FOSUserBundle에서 제공하는 추상화로 정의되었으므로, 당신은 꽤 많이 사용하게됩니다. 간단한 해결책은 모델의 setUsername 메서드를 재정의하고 가짜 (유효하고 고유 한) 전자 메일을 여기에 설정하는 것입니다. – Federkun

답변

0

필드를 제거 할 수 있지만 필요한 서버 잔여 유효성 검사가 없는지 확인해야합니다.

어떻게 수행할지는 FOS 사용자 클래스를 확장 한 방법 (또는 갖고있는 경우)에 따라 다릅니다. Youv'e 다시, 당신은 당신의 자신의 멤버 정의에서 제거 할 수 있습니다 클래스를 확장하는 경우

주석 제약

class Author 
{ 
    /** 
    * @Assert\NotBlank()   <--- remove this 
    */ 
    public $name; 
} 
  • (the docs에서) 예를 들어 다음과 같이.
  • 확장하지 않은 경우 확장 한 다음 유효성 제한 조건에 넣지 마십시오.
  • 또는 다른 모든 것 (그리고 나는 이것이 이상하다고 생각한다)을 isValid()으로 호출하기 전에 컨트롤러에서 기본값을 발행하십시오.

    public function someAction(Request $request) { 
        // ... 
    
        $user = new User(); 
    
        // fill empty value 
        $user->setEmail('[email protected]'); 
    
        // form stuff here 
        // ... 
        if ($form->isValid()) { 
         // do some stuff 
        } 
    
        return $this->render(blahblahbal); 
    } 
    
+0

답변을 얻지 못했습니다. 나는 당신이 옳다고 생각하지만 코드를 어디에 넣을 수 있는지 보여줄 수 있습니까? 나는 어떤 컨트롤러 파일도 변경할 필요가 없습니다.간단히 등록 양식을 오버 라이더하고 전자 메일을 제거하는 코드를 추가하여 FOSUserBundle의 전자 메일 필드에 대한 유효성 검사를 제거하여 전자 메일 필드없이 사용자를 등록 할 수 있습니다. 지금 "이 이메일은 유효하지 않습니다"라는 양식을 제출할 때 오류가 발생하지만 내 입력란은 표시되지 않습니다. – Dhaval

+0

당신이'User.php'를 확장 할 필요가있는 엔티티 파일. 당신 can not/youll에 youll가 컨트롤러를 편집해야하는 경우에. 그것이 보이지 않는 것, 그것은 당신이 원하는 것입니다.하지만 심포니는 그것을 비어있는 것으로 봅니다. – DevDonkey

관련 문제