2016-09-02 3 views
0

У меня есть FOSUserBundle в моем проекте Symfony. Теперь я хочу удалить поле формы регистрации, которое по умолчанию предоставляется FOSUserBundle.Как удалить поле формы из FOSUserBundle Symfony2.8?

Форма регистрации полей:

Имя

Id Email

Пароль

Повторить пароль

Теперь я не хочу 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, passwordrepeat password, это сообщите мне об ошибке The email is not valid.

Поэтому мне нужно изменить любой другой файл, чтобы удалить проверку электронной почты с помощью поля электронной почты?

Спасибо.

+0

'email' является обязательным полем модели, FOSUser предоставить вам расширяется. Если вы этого не хотите, просто не расширяйте FOS \ UserBundle \ Model \ User. – Federkun

+0

@Federico вы можете объяснить подробно? В каком файле мне нужно изменить? – Dhaval

+0

Так как 'email' определен в абстракции, предоставляемой FOSUserBundle, вы в значительной степени вынуждены его использовать. Я считаю, что простым решением является переопределить метод setUsername вашей модели и установить здесь фальшивое (действительное и уникальное) сообщение. – Federkun

ответ

0

Вы можете удалить поле, как вы это делали, но вы должны убедиться, что для него не требуется проверка на стороне сервера.

Как это сделать, это зависит от того, как вы расширили класс пользователя FOS (или если у вас есть).

аннотированных ограничения выглядеть так, например (от the docs)

class Author 
{ 
    /** 
    * @Assert\NotBlank()   <--- remove this 
    */ 
    public $name; 
} 
  • если youv'e расширенного класса, вы можете удалить его из своего собственного определения члена.
  • Если вы не расширили его, расширьте его, а затем не установите ограничение проверки.
  • Или, если не все остальное (и я думаю, что это взломанно), задайте значение по умолчанию в контроллере, прежде чем вы вызовете 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'. Если вы не хотите/не хотите, чтобы вам нужно было отредактировать контроллер. Его не показывают, чего вы хотите, но symfony все еще считает его пустым, о чем ему сказали, чтобы проверить его. – DevDonkey