2016-09-02 7 views
0

私はSymfonyプロジェクトにFOSUserBundleをインストールしました。今度は、デフォルトでFOSUserBundleによって提供される登録フォームフィールドを削除したいと思います。フォームフィールドをFOSUserBundle Symfony2.8から削除するには?

登録フォームのフィールドは、次のとおりです。

ユーザー名

メール同上

パスワード

繰り返しパスワード

ユーザーさて、私は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(); 
    } 

} 

、私はそうした後、それはだ、この電子メールフィールドで行われ、私の登録フォームから削除しますが、私はusernameを充填した後、フォームを送信すると、passwordrepeat password 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 } 

を変更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

関連する問題