2017-10-16 4 views
2

すべてのSymfonyフォームタイプのデフォルトを設定できますか?すべてのSymfonyフォームタイプのデフォルト設定

現在、Symfony(3.3)ベースのAPIバックエンドを開発中です。フロントエンドでは、次のようなオブジェクトとしてエンティティがあります。{"id": 1, "username": "foo" ..... }

エンティティを更新する場合は、オブジェクトをJSON.stringfyしてサーバーに送信します。

しかし、我々は$form->submit($request) を経由して、当社の事業体に要求をバインドする場合は、私たちが持っていないので、我々は(「このフォームは余分なフィールドを含めるべきではありません。」)のエラーが表示されます(および使用したくありません!) Form型の "id"。

だから我々は(このようなカスタムにformTypeか何かを延長せずに)一つ一つにformType

public function setDefaultOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(['allow_extra_fields' => true]); 
} 

すべてFormTypesのデフォルトとしてこれを設定する方法はありにtrueallow_extra_fieldsを設定する必要がありますか?

+0

エンティティでidプロパティをどのように定義していますか? (その注釈で)。 –

答えて

3

すべてのフォームタイプに対してこのデフォルト値をtrueに変更するために、フォームタイプ拡張を作成することができます。

フォームタイプの拡張機能は非常に強力です。システム全体の既存のフォームフィールドタイプを変更することができます。

class MyFormTypeExtension extends AbstractTypeExtension 
{  
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'allow_extra_fields' => true, 
     )); 
    } 

    public function getExtendedType() 
    { 
     return 'Symfony\Component\Form\Extension\Core\Type\FormType'; 
    } 
} 

Official documentationタイプの拡張子を登録する方法の詳細を参照してください。

注:allow_extra_fieldsオプションはFormTypeValidatorExtensionで定義されているので、それを確実にするためにpriorityタグ属性を使用し、それ以外の場合は、デフォルト値を上書きした後、カスタムタイプの拡張子が登録されていることを確認してください。

+0

thx、それはまさに私が探していたものでした! – Fabian

関連する問題