Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

kmnurunnabi's avatar

Naming inputs in quiz application

I am building a quiz application where I may have multiple questions like:

<form>
{{-- Question 1 --}}
<div class="question-1">
    <input type="text" name="title">
    <textarea name="description"></textarea>
    <select name="option">
        <option value="value-1">Option 1</option>
        <option value="value-2">Option 2</option>
        <option value="value-3">Option 3</option>
        <option value="value-4">Option 4</option>
    </select>
</div>

{{-- Question 2 --}}
<div class="question-2">
    <input type="text" name="title">
    <textarea name="description"></textarea>
    <select name="option">
        <option value="value-1">Option 1</option>
        <option value="value-2">Option 2</option>
        <option value="value-3">Option 3</option>
        <option value="value-4">Option 4</option>
    </select>
</div>
</form>

or

<form>
{{-- Question 1 --}}
<div class="question-1">
    <input type="text" name="title">
    <textarea name="description"></textarea>
    <input type="radio" name="option" /> Option 1
    <input type="radio" name="option" /> Option 2
    <input type="radio" name="option" /> Option 3
    <input type="radio" name="option" /> Option 4
</div>

{{-- Question 2 --}}
<div class="question-2">
    <input type="text" name="title">
    <textarea name="description"></textarea>
    <input type="radio" name="option" /> Option 1
    <input type="radio" name="option" /> Option 2
    <input type="radio" name="option" /> Option 3
    <input type="radio" name="option" /> Option 4
</div>
</form>

how can I name inputs in order to binding input using wire:model or validating fields in my livewire component?

0 likes
4 replies
tisuchi's avatar

@kmnurunnabi You may go with array-based naming because it's important to ensure that the inputs for each question are uniquely identified.

For example:


{{-- Question 1 --}}

    <input type="text" name="questions[0][title]" wire:model="questions.0.title">
    <textarea name="questions[0][description]" wire:model="questions.0.description"></textarea>
    <select name="questions[0][option]" wire:model="questions.0.option">
        <option value="value-1">Option 1</option>
        ....
    </select>


{{-- Question 2 --}}

    <input type="text" name="questions[1][title]" wire:model="questions.1.title">
    <textarea name="questions[1][description]" wire:model="questions.1.description"></textarea>
    <select name="questions[1][option]" wire:model="questions.1.option">
        <option value="value-1">Option 1</option>
        ...
    </select>

kmnurunnabi's avatar

@tisuchi Thanks for your answer. Now if i have repeater button that can add question fields dynamically then how to bind that dynamic behaviour? How to structure my bounded property dynamically with those dynamic input fields?

martinbean's avatar

@kmnurunnabi You should have a Question model, which has many Option models. Each option would then have its own unique identifier.

When a user is answering a question, you can then check if the option actually belongs to that question, and store the user’s response if so.

Please or to participate in this conversation.