Как реализовать предварительный просмотр изображения для Sonata / CollectionType - PullRequest
0 голосов
/ 30 апреля 2020

мы работаем над проектом с symfony 4.4 и сонатой. мы уже реализовали предварительный просмотр изображений для продуктов, который работает просто отлично. Вопрос в том, как реализовать то же поведение для CollectionType. со следующей реализацией изображение для каждой строки Коллекции одинаково.

final class DownloadAdmin extends AbstractAdmin
{
protected function configureFormFields(FormMapper $formMapper)
{

    $download = $this->getSubject();

    $fileFieldOptions = ['required' => false];
    if ($download && ($webPath = $download->getWebPath())) {
        $fileFieldOptions['help'] = '<img src="'.$webPath . $download->getFilename().'" class="admin-preview" style="width:160px;"/>';
    }


    $formMapper->add('title', TextType::class);
    $formMapper->add('position', IntegerType::class);
    $formMapper->add('azure_id', TextType::class);

    $formMapper->add('file', FileType::class, $fileFieldOptions);
}

, поэтому title, position и azure_id содержат значения из каждой строки, но

$this->getSubject()

запускается только один раз для коллекции, а не для каждой записи (по крайней мере, это мое предположение), что приводит к тому, что в каждой строке содержится одно и то же изображение.

вот категория admin, в которой мы используем CollectionType для загрузок:

final class CategoryAdmin extends AbstractTreeAdmin
{
protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper->add('title', TextType::class);
    $formMapper->add('product', EntityType::class, [
        'class' => Product::class,
        'choice_label' => 'title',
    ]);

    $formMapper
        ->add('downloads', CollectionType::class, [
            'by_reference' => false,
        ], [
            'edit' => 'inline',
            'inline' => 'table',
            'sortable' => 'position',
            'order' => 'ASC'
        ]);

}

каждая строка должна содержать отдельное изображение этой загрузки.

помощь очень ценится

...