>

Symfony 4에서 VichUploaderBundle을 사용하고 있으며 양식을 사용하여 여러 장의 사진을 보내는 방법에 대한 질문이 있습니다. 이렇게하려면 CollectionType과 일대 다 관계를 사용해야합니다 (한 제품에 여러 사진이 있음). 아래에는 양식의 빈 프레임 만 표시하는 코드가 있으며이 업 로더에있는 것처럼 사진을 추가 할 수있는 버튼이 없습니다. 왜 이런 일이 일어나고 있는지 이해할 수 없습니다.

제품 실체 (일대 다) :

/**
* @var ProductMultiImage[]
* One Product has Many Images.
* @ORM\OneToMany(targetEntity="App\Entity\Image\ProductMultiImage", mappedBy="product", cascade={"persist"})
* @ORM\JoinColumn(nullable=true)
*/
private $productMultiImages = null;

이미지 엔티티 (다 대일) :

/**
* Many Images have One Product.
* @ORM\ManyToOne(targetEntity="App\Entity\Admin\Product", inversedBy="productMultiImages", cascade={"persist"})
* @ORM\JoinColumn(name="product_id", referencedColumnName="id", nullable=true)
*/
private $product = null;

사진 추가 양식 :

class ProductImageType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('productMultiImages', CollectionType::class, array(
                'data_class'    => ImageType::class,
                'allow_add'     => true,
                'allow_delete'  => true,
                'by_reference'  => false,
            ))
        ;
    }
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => null,
        ]);
    }
}

이미지 유형 :

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('imageFile', VichImageType::class)
    ;
}

어떤 솔루션을 찾을 수 있습니까?

  • 답변 # 1

    $productMultiImages가 null이면 양식에 채울 내용이 없습니다. 빈 배열 컬렉션으로 설정하고 하나 이상의 빈 이미지 엔티티를 추가하십시오.

    제품 엔티티의 __constuct ()

    $this->productMultiImages = new ArrayCollection();
    $this->productMultiImages->add(new Image();
    
    

    또는 양식 작성기로 전달하기 전에 인스턴스화 된 제품에 추가하십시오.

    마지막으로 사용했을 때 VichUploader는 단일 양식 파일 요소로 다중 파일 업로드를 지원하지 않았습니다. 업로드하려는 각 이미지의 양식에 파일 업로드 요소를 추가하려면 클라이언트에서 자바 스크립트를 사용해야합니다. 이에 대한 자세한 내용은 https://symfony.com/doc/current/form/form_collections.html을 참조하십시오.

  • 답변 # 2

    아마도 필요한 JQuery 코드를 나뭇 가지에 추가하는 것을 잊었을 것입니다. 수집 작업. 또한 버튼의 경우 올바른 클래스를 사용하여 직접 만들어야합니다. 그것은 마술처럼 오지 않습니다;)

    <button type="button" class="add-another-collection-widget" data-list="#your-fields-list">Add another email</button>
    
    

    JQuery 코드는 다음에서 찾을 수 있습니다.

    http://symfony.com/doc/current/reference/forms/types/collection.html

    이 JQuery 코드는 버튼을 클릭 할 때마다 JQuery가 데이터 속성에서 요소를 복사하고 (dev-tools로 원래 요소를 "검사"할 때 볼 수 있음) 숫자를 추가합니다. 첫 번째 컬렉션 항목은 0부터 시작합니다.

  • 이전 android - 조각은 어떻게 활동의 데이터를 수신해야합니까?
  • 다음 reportviewer - Report Viewer 2015가 설치되어 있는지 확인하십시오C # 설치 프로그램