Senaryo: 2 seçim içeren bir formum var. Kullanıcı ilk seçenekten bir şey seçtiğinde, ikinci seçim yeni değerlerle doldurulur. Bu bölüm iyi çalışıyor.Symfony2: Ajax ve onaylama ile seçenekleri değiştirin
Ancak form, ilk formda izin verilmeyen bazı seçenekler içerdiğinden doğrulanmadı.
Form:
<?php
class MyType extends AbstractType
{
private $category;
public function __construct($category = null)
{
$this->category = $category;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('category', 'choice', array(
'choices' => array(
'foo' => 'foo',
'bar' => 'bar'
)
);
$builder->add('template', 'choice', array(
'choices' => $this->loadChoices()
);
}
private function loadChoices()
{
// load them from DB depending on the $this->category
}
}
Başlangıçta kategori foo
olduğunu. Bu yüzden foo için şablonlar yüklenir ve seçenek olarak ayarlanır. Ancak kullanıcı bar
seçerse, çubuk şablonları yüklenir. Ancak form hala foo seçimlerine sahip ve doğrulamıyor.
Bunu çözmenin en iyi yolu nedir?
<?php
$form = $this->createForm(new MyType());
if ($request->getMethod() === 'POST') {
if ($request->request->has($form->getName())
&& isset($request->request->get($form->getName())['category'])) {
$form = $this->createForm(new MyType($request->request->get($form->getName())['category']));
}
// ...
}
Bu çalışır, ancak değerini ayarlarken IllegalArgumentException
atar ve sadece varsayılan varsayar çünkü bunu test edemez: buldum
bir yolu sadece denetleyici formu yeniden başlatmak için oldu. Bunun için daha iyi bir çözüm var mı? Şimdiden teşekkürler!
Eğer doğrulamak zorunda seçeneklerin her set için doğrulama grupları ayarlamak denediniz daha doğru bir yolu olan u bu yönetmek için Etkinlikleri kullanmak zorunda düşünüyorum? Daha sonra, validator hizmetini yalnızca sizin için uygun olan grupta arayabilirsiniz. http://symfony.com/doc/2.0/book/forms.html#validation-groups – Xocoatzin