* * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ namespace Chill\MainBundle\Form\ChoiceLoader; use Symfony\Component\Form\ChoiceList\Loader\ChoiceLoaderInterface; use Symfony\Component\Form\ChoiceList\ChoiceListInterface; use Chill\MainBundle\Repository\PostalCodeRepository; use Chill\MainBundle\Entity\PostalCode; /** * Class PostalCodeChoiceLoader * * @package Chill\MainBundle\Form\ChoiceLoader * @author Julien Fastré */ class PostalCodeChoiceLoader implements ChoiceLoaderInterface { /** * @var PostalCodeRepository */ protected $postalCodeRepository; /** * @var array */ protected $lazyLoadedPostalCodes = []; /** * PostalCodeChoiceLoader constructor. * * @param PostalCodeRepository $postalCodeRepository */ public function __construct(PostalCodeRepository $postalCodeRepository) { $this->postalCodeRepository = $postalCodeRepository; } /** * @param null $value * @return ChoiceListInterface */ public function loadChoiceList($value = null): ChoiceListInterface { $list = new \Symfony\Component\Form\ChoiceList\ArrayChoiceList( $this->lazyLoadedPostalCodes, function(PostalCode $pc) use ($value) { return \call_user_func($value, $pc); }); return $list; } /** * @param array $values * @param null $value * @return array */ public function loadChoicesForValues(array $values, $value = null) { $choices = []; foreach($values as $value) { if (empty($value)) { $choices[] = null; } else { $choices[] = $this->postalCodeRepository->find($value); } } return $choices; } /** * @param array $choices * @param null $value * @return array|string[] */ public function loadValuesForChoices(array $choices, $value = null) { $values = []; foreach ($choices as $choice) { if (NULL === $choice) { $values[] = null; continue; } $id = \call_user_func($value, $choice); $values[] = $id; $this->lazyLoadedPostalCodes[$id] = $choice; } return $values; } }