router = $router; } /** * @return string */ public function getExtendedType() { return EntityType::class; } /** * @param FormView $view * @param FormInterface $form * @param array $options */ public function buildView(FormView $view, FormInterface $form, array $options) { if (!isset($options['api_data'])) { return; } $apiData = $options['api_data']; if (!is_array($apiData)) { throw new \InvalidArgumentException('Option "api_data" must be an array for form "' . $form->getName() . '"'); } if (!isset($apiData['select'])) { return; } if (!isset($apiData['route'])) { throw new \InvalidArgumentException('Missing "route" option for "api_data" option for form "' . $form->getName() . '"'); } if (!isset($apiData['route_params'])) { $apiData['route_params'] = []; } $formPrefix = $form->getParent()->getName(); if (!empty($formPrefix)) { $formPrefix .= '_'; } $view->vars['attr'] = array_merge($view->vars['attr'], [ 'data-related-select' => $formPrefix . $apiData['select'], 'data-api-url' => $this->router->generate($apiData['route'], $apiData['route_params']), ]); } /** * @param OptionsResolver $resolver */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefined(['api_data']); $resolver->setAllowedTypes('api_data', 'array'); //$resolver->setDefault('api_data', []); } }