示例#1
0
 /**
  * {@inheritdoc}
  */
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     if (isset($options['include'])) {
         $this->include = $options['include'];
     }
     if (isset($options['multiple'])) {
         $this->multiple = $options['multiple'];
     }
     if ($this->include && !$this->multiple) {
         throw new \LogicException("You can't include an object in a single selection!");
     }
     $builderName = ucfirst($builder->getName());
     // TODO: Use a more accurate placeholder
     $placeholder = $this->multiple ? 'brad, kierra, ...' : null;
     if ($this->include) {
         $exclude = $this->include->getType() . ':' . $this->include->getId();
     } else {
         $exclude = null;
     }
     // Model IDs that will be manipulated by javascript
     $builder->add('ids', 'hidden', array('attr' => array('class' => 'select2-compatible', 'data-exclude' => $exclude, 'data-label' => $builderName, 'data-multiple' => $this->multiple, 'data-required' => $options['required'])));
     // Model name inputs that will be edited by users if javascript is
     // disabled
     foreach ($this->types as $type) {
         $pluralType = $this->multiple ? Inflector::pluralize($type) : $type;
         $label = count($this->types) > 1 ? "{$builderName} {$pluralType}" : $builderName;
         $builder->add($builder->create($type, 'text', array('attr' => array('class' => 'model-select', 'data-type' => $type, 'placeholder' => $placeholder), 'label' => $label, 'required' => false)));
     }
     if ($this->multiple) {
         $transformer = new MultipleAdvancedModelTransformer($this->types);
         if ($this->include) {
             $transformer->addInclude($this->include);
         }
     } else {
         $transformer = new SingleAdvancedModelTransformer($this->types);
     }
     $builder->addViewTransformer($transformer);
     // Make sure we can change the values provided by the user
     $builder->setDataLocked(false);
 }