A Bolt extension to make forms.
GitHub Fork Edit this page

TraversableChoice

<?php

namespace Example;

/**
 * Class to demonstrate choice value selection.
 *
 * @author Gawain Lynch <gawain.lynch@gmail.com>
 */
class TraversableChoice implements \Iterator
{
    /** @var string */
    private $name;
    /** @var int */
    private $position = 0;
    /** @var array */
    private $lists = [
        'group_a' => [
            'item_1', 'item_2', 'item_3', 'item_4', 'item_5'
        ],
        'group_b' => [
            'item_11', 'item_12', 'item_13', 'item_14', 'item_15'
        ],
    ];

    /**
     * Constructor.
     *
     * @param string $name The "group" key of the $lists property array
     */
    public function __construct($name)
    {
        $this->name = $name;
    }

    /**
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * {@inheritdoc}
     */
    public function current()
    {
        $listName = $this->name;
        $position = $this->position;

        return $this->lists[$listName][$position];
    }

    /**
     * {@inheritdoc}
     */
    public function next()
    {
        ++$this->position;
    }

    /**
     * {@inheritdoc}
     */
    public function key()
    {
        return $this->position;
    }

    /**
     * {@inheritdoc}
     */
    public function valid()
    {
        $listName = $this->name;
        $position = $this->position;

        return isset($this->lists[$listName][$position]);
    }

    /**
     * {@inheritdoc}
     */
    public function rewind()
    {
        $this->position = 0;
    }
}