Validácia dynamicky pridaného formulárového poľa
- Čamo
- Člen | 798
Zdravím vás,
vie mi prosím vás niekto poradiť ako zvalidujem dynamické formulárové
pole? Chápem, že si môžem napísať vlastné validačné pravidlo, ale chcem
aby to validovalo aj v javascripte(bez toho, aby som to písal). Podmienka
vyzerá takto a v js to funguje tak ako to je:
$form->addMultiSelect('brands', 'brands.label', $this->campaignService->brandsToFormSelect() )
->addConditionOn( $form['global'], $form::EQUAL, false )
->addConditionOn( $form['categories'], ~$form::FILLED )
->addConditionOn( $form['products'], ~$form::FILLED )
->addFilter( function ( $value ) use ( $form ) {
return $value = $form->getHttpData()['products'];
})->setRequired('brands.required');
Proste pole brands kontroluje, či sú vyplnené, alebo nezaškrtnuté iné políčka formulára. A medzi tými inými je pole products, ktoré sa ale vyplní cez js dynamicky. Vlastne by som len potreboval do hodnoty $value pre pole products vložiť $form->getHttpData()[‚products‘]. Myslel som, že to pôjde cez addFilter(), ale to zrejme nemá s validáciou nič spoločné. Dá sa to nejako elegantne vyriešiť.
Dúfam, že sa to dá pochopiť. Ďakujem.
Editoval Čamo (3. 5. 2016 17:56)
- CZechBoY
- Člen | 3608
Možná by bylo lepší to vysvětlit na konkrétním příkladu.
Ty přes nějakej ajax načteš hodnoty do selectboxu, tzn něco jako dependent
selectbox.
- Čamo
- Člen | 798
CZechBoY ano a v tom prípade je pole products pri validácii prázdne. Lenže ja potrebujem podľa neho validovať iné polia a to robí problémy. Ale akurát som to (dúfam)vyriešil cez onValidate.
public function validateCreateForm( $form )
{
if( ( $brandsErrors = $form['brands']->getErrors() ) && $form->getHttpData()['products'] )
{
$brands = $form['brands'];
$msg = $form->translator->translate('brands.required');
foreach( $brandsErrors as $key => $val )
{
if( $val === $msg )
{
$brands->cleanErrors();
unset($brandsErrors[$key]);
}
}
foreach( $brandsErrors as $e ) // If there are more errors they have to be set back.
{
$brands->addError($e);
}
}
}
Takže javascript sa viliduje normálne a v onValidate len zmažem príslušný error na komponente form[‚brands‘].
Editoval Čamo (16. 6. 2016 16:16)