# Form Fieldset Validation

**URL:** <https://discourse.laminas.dev/t/form-fieldset-validation/3303>\
**Category:** Components & MVC\
**Tags:** laminas-form, laminas-mvc, laminas-validator\
**Created:** [April 19, 2023, 1:14pm UTC](https://discourse.laminas.dev/t/form-fieldset-validation/3303 "2023-04-19T13:14:42Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![makxk](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/makxk/32/1266_2.png) [@makxk](https://discourse.laminas.dev/u/makxk)\
**Post date:** [April 19, 2023, 1:14pm UTC](https://discourse.laminas.dev/t/form-fieldset-validation/3303/1 "2023-04-19T13:14:42Z")

</div>

Hi everyone!

Quick question to make sure I did not miss anything:  
I have a form with one field and one fieldset consisting of two fields.

If one of the fields in the fieldset is filled in by the user, I would like to have them both as required.  
If none of them is filled, they should be optional.

Is such a thing possible?

---

<div class="post-metadata">

**Author:** ![froschdesign](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/froschdesign/32/38_2.png) [@froschdesign](https://discourse.laminas.dev/u/froschdesign)\
**Post date:** [April 19, 2023, 1:37pm UTC](https://discourse.laminas.dev/t/form-fieldset-validation/3303/2 "2023-04-19T13:37:03Z")

</div>

> [@makxk](#):
>
> …I would like to have them both as required.

What do mean with “required”? The HTML form element should have [the attribute “required”](https://developer.mozilla.org//en-US/docs/Web/HTML/Attributes/required) or the [input of the input filter should be required](https://docs.laminas.dev/laminas-inputfilter/specs/#example)?

---

<div class="post-metadata">

**Author:** ![makxk](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/makxk/32/1266_2.png) [@makxk](https://discourse.laminas.dev/u/makxk)\
**Post date:** [April 19, 2023, 1:45pm UTC](https://discourse.laminas.dev/t/form-fieldset-validation/3303/3 "2023-04-19T13:45:34Z")

</div>

I would prefer to do it “serverside” through laminas-inputfilter.  
If that’s not possible, I will probably need to use javascript and use the required-attribute, right?

---

<div class="post-metadata">

**Author:** ![makxk](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/makxk/32/1266_2.png) [@makxk](https://discourse.laminas.dev/u/makxk)\
**Post date:** [April 20, 2023, 7:31am UTC](https://discourse.laminas.dev/t/form-fieldset-validation/3303/4 "2023-04-20T07:31:41Z")

</div>

Right, nevermind.

I opted for removing empty fieldsets from the interface with a jquery script and left the validators alone.

---

<div class="post-metadata">

**Author:** ![froschdesign](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/froschdesign/32/38_2.png) [@froschdesign](https://discourse.laminas.dev/u/froschdesign)\
**Post date:** [April 20, 2023, 7:38am UTC](https://discourse.laminas.dev/t/form-fieldset-validation/3303/5 "2023-04-20T07:38:01Z")

</div>

> [@makxk](#):
>
> If that’s not possible…

Why should this not be possible, after all it is normal PHP. 😉

Here is an example:

```php
class ExampleForm extends Laminas\Form\Form
{
    public function setData($data)
    {
        // Check type of $data here…

        if (array_key_exists('field-one', $data)
            && $data['field-one'] !== ''
        ) {
            $this->getInputFilter()?->get('field-two')->setRequired(true)
                                                      ->setAllowEmpty(false);
        }

        return parent::setData($data);
    }
}

```

---

<div class="post-metadata">

**Author:** ![froschdesign](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/froschdesign/32/38_2.png) [@froschdesign](https://discourse.laminas.dev/u/froschdesign)\
**Post date:** [April 20, 2023, 7:43am UTC](https://discourse.laminas.dev/t/form-fieldset-validation/3303/6 "2023-04-20T07:43:21Z")

</div>

Another option is to [define a validation group](https://docs.laminas.dev/laminas-form/v3/quick-start/#validation-groups) based on the incoming data.

---

<div class="post-metadata">

**Author:** ![makxk](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/makxk/32/1266_2.png) [@makxk](https://discourse.laminas.dev/u/makxk)\
**Post date:** [April 20, 2023, 8:49am UTC](https://discourse.laminas.dev/t/form-fieldset-validation/3303/7 "2023-04-20T08:49:41Z")

</div>

That’ll work, too, thanks for following up!
