У меня есть объект Product
, и у меня есть объект File
. Связь между этими 2 обычно является отношением ManyToMany. Но мне нужно также поле Значение «sorting
» и «description
», поэтому я должен объявить свою собственную JoinTable ProductHasFile
. Теперь я хочу в своей форме, что у меня может быть Product
bute include File
FormTpye, а не ProductHasFile
FormType.Symfony2: Как добавить FormType
Entity продукта:
/**
* @ORM\Entity
* @ORM\Table(name="Product")
*/
class Product
{
/**
* @ORM\OneToMany(targetEntity="ProductHasFile", mappedBy="product", cascade={"persist"}))
*/
private $productHasFiles;
....
Entity Файл:
/**
* @ORM\Entity
* @ORM\HasLifecycleCallbacks
*/
class File
{
/**
* @ORM\OneToMany(targetEntity="ProductHasFile", mappedBy="file")
*/
private $productHasFiles;
...
И моя генерироваться Entity ProductHasFile:
/**
* @ORM\Entity
* @ORM\Table(name="ProductHasFile")
*/
class ProductHasFile
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $sorting;
/**
* @ORM\Column(type="string", nullable=true)
*/
private $description;
/**
* @ORM\ManyToOne(targetEntity="Product", inversedBy="productHasFiles")
* @ORM\JoinColumn(name="product_id", referencedColumnName="id")
*/
private $product;
/**
* @ORM\ManyToOne(targetEntity="File", inversedBy="productHasFiles")
* @ORM\JoinColumn(name="file_id", referencedColumnName="id")
*/
private $file;
Когда я теперь сделать мой Formtype для продукта:
class ProductType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
->add('productHasFiles', CollectionType::class, array(
'entry_type' => ProductHasFileType::class,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
,
)
)
и мой FormType для ProductHasFileType:
class ProductHasFileType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
/**
* @var $entityManager EntityManager
*/
$fileRepository = $options['fileRepository'];
$builder
->add('sorting', TextType::class)
->add('description', TextType::class)
->add('file', EntityType::class, array(
'class' => 'AppBundle\Entity\File',
'label' => 'file',
))
;
я получаю только dropdwon для объекта File. Но я хочу, чтобы мой полный File FormType
, который имеет Uploadfield и другие вещи, это выглядит следующим образом:
class FileType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('description', TextType::class, array(
'label' => 'description',
))
->add('type', TextType::class, array(
'label' => 'type',
))
->add('file', \Symfony\Component\Form\Extension\Core\Type\FileType::class, array(
'label' => 'file',
))
;
}
ли кто-нибудь имеет решение для этого?
Спасибо за upvote.Please рассмотреть вопрос о принятии моего ответа, чтобы другие могли извлечь выгоду из программирования it.Happy – Mawcel