Я попытался оглядеться для возможного решения этого, но не повезло.
У меня есть взаимосвязь между многими свойствами и почтовыми индексами от многих до многих, я не могу отображать почтовые индексы в выбранном примере из-за количества возможных записей.
Мое решение состояло в том, чтобы оно было как текстовое поле в форме, а затем уловить его на PrePersist для поиска соответствующей записи, а затем применить ее к объекту перед тем, как продолжить работу с db.
Проблема заключается в том, когда форма проверяется, она все еще пытается передать строковое значение устройству, ожидающему объект объекта.
Есть ли способ предотвратить ошибку?
Я прикрепил свой код формы для вас.
Благодаря,
Гарри
$propertyData = new PropertyData(); $builder ->add('reference') ->add('listing_type', 'choice', array('choices' => $propertyData->getListingTypes())) ->add('listing_status', 'choice', array('choices' => $propertyData->getStatusList())) ->add('title') ->add('house_number') ->add('address_line_1') ->add('address_line_2') ->add('town', 'text', array('data_class'=> 'Minos\Bundle\PropertyBundle\Entity\UtilTown')) ->add('county') ->add('country') ->add('council') ->add('region') ->add('postcode', 'text', array('data_class'=> 'Minos\Bundle\PropertyBundle\Entity\UtilPostcode')) ->add('short_description') ->add('long_description') ->add('size_sq_ft') ->add('floor_level') ->add('property_age') ->add('tenure_type', 'choice', array('choices' => $propertyData->getTenureTypes())) ->add('garage') ->add('num_living_rooms') ->add('num_bathrooms') ->add('num_bedrooms') ->add('num_floors') ->add('num_receptions') ->add('property_type') //->add('prices') ;
Перед преобразованием формы вам понадобится преобразователь данных, чтобы преобразовать ввод строки в объект.
$builder // ... ->add('postcode', 'text', array( 'data_class'=> 'Minos\Bundle\PropertyBundle\Entity\UtilPostcode' )) // ... ; $builder->get('postcode')->addModelTransformer(new CallbackTransformer( //Render an entity to a string to display in the text input function($originalInput){ $string = $originalInput->getPostcode(); return $string; }, //Take the form submitted value and convert it before processing. //$submittedValue will be the string because you defined // it in the builder that way function($submittedValue){ //Do whatever to fetch the postcodes entity: $postcodeEntity = $entityManager->find('AppBundle\postcodes', $submittedValue); return $postcodeEntity; } ));
Это всего лишь пример (я его не тестировал), вам нужно будет изменить некоторые вещи, чтобы они соответствовали тому, как выглядят ваши сущности.