--- /dev/null
+<?php
+
+namespace Epnadmin\CoreBundle\Form\Type;
+
+use Symfony\Component\Form\FormBuilderInterface;
+use Symfony\Component\Form\AbstractType;
+use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\Options;
+
+use Epnadmin\CoreBundle\Entity\Resource;
+
+class ResourceChoiceType extends AbstractType
+{
+ public function setDefaultOptions(OptionsResolverInterface $resolver)
+ {
+
+ $qb = function (Options $options) {
+ return function ($repository) use ($options) {
+
+ $resource = $options['resource'];
+ if (null === $resource) {
+ throw new \InvalidArgumentException('No resource defined in form options');
+ }
+
+ return $repository->createQueryForParent($resource);
+ };
+ };
+
+ $isParentRequired = function (Options $options) {
+ $resource = $options['resource'];
+ if (null === $resource) {
+ throw new \InvalidArgumentException('No resource defined in form options');
+ }
+
+ return $resource->isParentRequired();
+ };
+
+ $resolver->setDefaults(array(
+ 'resource' => null,
+ 'class' => 'Epnadmin\CoreBundle\Entity\Resource',
+ 'query_builder' => $qb,
+ 'required' => $isParentRequired,
+ 'allow_empty' => !$isParentRequired
+ ));
+ }
+
+ public function getParent()
+ {
+ return 'entity';
+ }
+
+ public function getName()
+ {
+ return 'epn_resource_choice';
+ }
+}