私は、以下の問題を解決するための最善の(または単なる働く)方法を探しています。 私は何非標準であることUserRepeatedPasswordType
、それはこのエンティティへのネストされたフォーム/マッピングフィールド
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add(
'password',
Type\RepeatedType::class,
[
'type' => Type\PasswordType::class,
'required' => true,
'first_options' => [
'label' => 'Password'
],
'second_options' => [
'label' => 'Repeat Password'
],
]
);
}
のように見え、これら二つのフィールドがpasswordReset形とuserSettingsでも使用されているので、私はそれを作成したことで、標準のUserTypeフォーム
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add(
'username',
Type\TextType::class
)
->add(
'email',
Type\EmailType::class
)
->add(
'plainPassword',
Security\UserRepeatedPasswordType::class
)
->add(
'roles',
Type\ChoiceType::class,
[
'multiple' => true,
'expanded' => true,
'choices' => $this->getRoleChoices()
]
);
}
のように持っています形。
1)この方法で使用するとUser
エンティティの値が正しくマッピングされません - 文字列が期待されていますが、配列があるというエラーがあります。私はView and Model変圧器を使ってみましたが、適切な結果は得られませんでした(しかし、私はあまり経験がありませんので、そうかもしれません)。私もgetParent()
で試してみましたが、そこにはUserType
を渡しましたが、無限ループになり500となってしまいました。UserRepeatedPasswordType
からUserType
に貼り付けフィールドをコピーするだけで正しく動作します。
2)これは解決(あるいはコピーペーストにより、他の方法で行うことができない場合)、別の関連(私は信じている)問題があるされている場合:
私はこのChangePasswordType
フォームを、持っていますあなたのパスワードをリセットするために使用されます。
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add(
'confirmationToken',
Type\HiddenType::class,
[
'required' => true,
'constraints' => [
new NotBlank(),
]
]
)
->add(
'plainPassword',
Type\RepeatedType::class,
[
'type' => Type\PasswordType::class,
'required' => true,
'first_options' => [
'label' => 'Password'
],
'second_options' => [
'label' => 'Repeat Password'
],
]
)
->add(
'changePassword',
Type\SubmitType::class
);
}
そして、それがあるとして、それは正常に動作しますが、私はそれで二つのことをしたい - まず、私の最初の問題を解決し、それにUserRepeatedPasswordType
を使用し、二 - 私はいくつかのAssert\Length
$plainPassword
にUser
エンティティで行われてきたし、それUserTypeフォームを使用して新しいユーザーを送信すると正しく動作します。しかし、そのバリデーションをChangePasswordType
にマッピングするか、理想的にはUserRepeatedPasswordType
にマッピングしたいと思います。すべてのルールを1か所にまとめたいだけです。これもできますか?任意のソリューション/ヒント/アドバイスありがとう。