Bir form koleksiyonundan boş kayıtları filtrelemek için çalışıyorum. Benim uygulamam ile 2 tane var, Competition
ve League
. Bir yarışmada sıfır veya daha fazla lig var.ZF2 Form Koleksiyonları - boş kayıtları filtrele
Bu yüzden bir Rekabet formu (CompetitionForm
), bir Rekabet fieldset (CompetitionFieldset
) ve Lig fieldset (LeagueFieldset
) oluşturun.
CompetitionFieldset
CompetitionForm
ilave edilir ve
CompetitionFieldset
kullanıcının 1 ya da daha fazla Leagues eklemek için izin
Zend\Form\Element\Collection
kullanır. Aşağıda her bir sınıf için geçerli kodu ekledim. Varsayılan olarak
, ben Zend\Form\Element\Collection
öğe eklerken, ben 3.
için sayım seçeneği ayarlamak, CompetitionFieldset
görünecek şekilde, bir yarış içerisinde 3 ligler için giriş alanlarını görüntülemek istediğiniz Ama bir kullanıcı kokan eğer Ligler için herhangi bir veri sağlama, onları görmezden gelmek istiyorum. Şu anda veritabanımda üç boş ilişkili lig var.
LeagueFieldset
alanına
InputFilter
ayarlamam gerekirse, form doğrulanmayacaktır.
belki de benim varlıkları modellemek ve vb benim formları hidrat için Doctrine2 kullanıyorum bahsetmeliyiz
Ben içeri bile benim modellerde bazı ek kod ile çalışmak veya yapabilir eminim benim Denetleyiciyi formunu işlediğim yerdeyim, ama eminim ki filtreler kullanarak belki de daha iyi bir çözüm var.
Eğer herhangi biri beni doğru yönde gösterebilirse çok memnun olur.
Sağladığınız her türlü yardım için şimdiden çok teşekkürler.
:wq
familymangreg
Benim CompetitionForm
use Kickoff\Form\AbstractAdminForm;
use Doctrine\Common\Persistence\ObjectManager;
use DoctrineModule\Stdlib\Hydrator\DoctrineObject as DoctrineHydrator;
use Zend\Stdlib\Hydrator\ClassMethods;
class CompetitionForm extends AbstractAdminForm
{
public function __construct(ObjectManager $objectManager)
{
parent::__construct($objectManager, 'competition-form');
$fieldset = new CompetitionFieldset($objectManager);
$fieldset->setUseAsBaseFieldset(true);
$this->add($fieldset);
$this->add(array(
'name' => 'submit',
'attributes' => array(
'type' => 'submit',
'value' => 'Submit',
'id' => 'submitbutton',
),
));
}
}
Benim CompetitionFieldset
use Kickoff\Form\AbstractFieldset;
use Kickoff\Model\Entities\Competition;
use Doctrine\Common\Persistence\ObjectManager;
use DoctrineModule\Stdlib\Hydrator\DoctrineObject as DoctrineHydrator;
class CompetitionFieldset extends AbstractFieldset
{
public function __construct(ObjectManager $objectManager)
{
parent::__construct($objectManager,'Competition');
$this->setHydrator(new DoctrineHydrator($this->objectManager,'Kickoff\Model\Entities\Competition'))
->setObject(new Competition());
$this->setLabel('Competition');
$this->add(array(
'name' => 'name',
'options' => array(
'label' => 'Competition name (e.g. Premier League)',
),
'attirbutes' => array(
'type' => 'text',
),
));
$this->add(array(
'name' => 'long_name',
'options' => array(
'label' => 'Competition long name (e.g. Barclays Premier League)',
),
'attirbutes' => array(
'type' => 'text',
),
));
$leagueFieldset = new LeagueFieldset($objectManager);
$this->add(array(
'type' => 'Zend\Form\Element\Collection',
'name' => 'leagues',
'options' => array(
'label' => 'Leagues',
'count' => 3,
'should_create_template' => true,
'allow_add' => true,
'target_element' => $leagueFieldset,
),
));
}
}
Benim LeagueFieldset
use Kickoff\Form\AbstractFieldset;
use Kickoff\Model\Entities\League;
use Doctrine\Common\Persistence\ObjectManager;
use DoctrineModule\Stdlib\Hydrator\DoctrineObject as DoctrineHydrator;
use Zend\InputFilter\InputFilterProviderInterface;
class LeagueFieldset extends AbstractFieldset implements InputFilterProviderInterface
{
public function __construct(ObjectManager $objectManager)
{
parent::__construct($objectManager,'League');
$this->setHydrator(new DoctrineHydrator($this->objectManager,'Kickoff\Model\Entities\League'))
->setObject(new League());
$this->setLabel('League');
$this->add(array(
'name' => 'name',
'options' => array(
'label' => 'League name (e.g. First Qualifying Round)',
),
'attirbutes' => array(
'type' => 'text',
),
));
$this->add(array(
'name' => 'long_name',
'options' => array(
'label' => 'League long name (e.g. UEFA Champions League First Qualifying Round)',
),
'attirbutes' => array(
'type' => 'text',
),
));
}
public function getInputFilterSpecification()
{
return array(
'name' => array(
'required' => true,
)
);
}
}
Lig modelinde, alanların boş olup olmadığını kontrol eden bir yöntem yazıp, daha sonra, bu girdileri denetlemeden önce DB girişlerine göndermeden önce, Ligi girişlerini yineleyin. Boşsa, kaydetme. Muhtemelen boş saha kümelerinin hala doğrulayıcıları ve filtreleri çalıştıracağı için kontrol etmenin en etkili yeri değil ama işe yarayacaktı. –
İlgili kodu, denetleyicinize ve doktrin birimlerinizdeki ilişkilendirmeye postalayabilir misiniz? – YRM