カスタムプロパティパスで定義されたフィールドのエラーマッピングに問題があります。次のように私の状況は次のとおりです。Symfonyフォーム:カスタムproperty_pathを使用したフィールドのエラーマッピング
フォームタイプ:
class MyFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add(
'aField',
TextType::class,
['property_path' => 'anObject.aProperty']
);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([ 'data_class' => FormData::class ]);
}
}
フォームデータクラス:
class FormData
{
/**
* @var MyObject
* @Assert\Valid
*/
public $anObject;
}
フォームデータがネストされたオブジェクト:
class MyObject
{
/**
* @var string
* @Assert\NotBlank
*/
public $aProperty;
// NOTE: this object has other properties that are not mapped by my form and I'm not listing here for the sake of brevity.
}
私の問題があります次のようになります。aProperty
に違反が発生した場合、違反パスはdata.anObject.aProperty
です。エラーはフォームフィールドaField
に自動的にはマッピングされません。私はこれが "バニラ"検証の観点から正しいと理解していますが、正しいフィールドにフォームエラーを付けるために、property_path
属性に基づいてマッピングを調整するフォームレベルの翻訳レイヤーが必要です。私はerror_mapping
オプションでジャグリングを試みましたが、それはそれが作られたものではないことが判明しました。
私はこれを「デフォルト」の動作として期待していますか?あなたはこれがバグと見なされると思いますか、あるいは少なくとも要求する価値のある機能要求ですか?誰かが同様の状況に陥って解決策を見つけたのでしょうか?
'aField'は何ですか?それは 'anObject'マッピングですか?それは明らかではないようです。 – DonCallisto
以下のクラスにあるように、 'aField'は' anObject'の 'aProperty'にマップされます。それ自体はフォームデータクラスのプロパティです。 –
がマップされています...どこですか?あなたのクラスで 'aField'が表示されません:)その意味は – DonCallisto