Variable "pageName" does not exist Symfony 5 EasyAdmin 4

621 Views Asked by At

I'm trying to render an image from VichUploader Bundle, and I succeed to do it. But when I try to include : '@EasyAdmin/crud/detail.html.twig' in my twig file I got an pageName does not exist.

And when I do not set a custom template on my CrudController the pageName exist.

I can't figure out why...

I'm using PHP 8.0, Symfony 5.4.6, EasyAdmin 4.0, and VichUploader 1.19

here is my code:

CrudController:

public function configureFields(string $pageName): iterable
    {
        $pageName = "detail";

        return [
            $pageName,
            TextField::new('Title'),
            TextareaField::new('Description')->hideOnIndex(),
            IntegerField::new('Price')->onlyWhenCreating(),
            TextField::new('linkToBookingCom', 'Link to booking.com'),
            TextField::new('frontImageFile', 'Front image')->setFormType(VichImageType::class)->hideOnIndex(),
            CollectionField::new('gallery', 'Gallery of images')
                ->setEntryType(GalleryType::class)
                ->hideOnIndex()
                ->setTemplatePath(
                    'backoffice/custom-gallery-rendering.html.twig'
                )
            ->setFormTypeOption('by_reference', false)
            ,
        ];
        // TODO create an assert to validate the link probably with some regex
    }


    public function configureCrud(Crud $crud): Crud
    {
        return $crud
            ->renderContentMaximized()
            ->setEntityLabelInSingular('Suite')
            ->setEntityLabelInPlural('Suites')
            ->setPageTitle(Crud::PAGE_DETAIL, fn(Suite $suite) => $suite->__toString()."details")
            ;
    }

    public function configureResponseParameters(KeyValueStore $responseParameters): KeyValueStore
    {
        if ($responseParameters->has('pageName')) {
            if ($responseParameters->get('pageName') === Crud::PAGE_DETAIL) {
                $responseParameters->set('suite', $responseParameters->get('entity'));
                $responseParameters->set('templateName', 'custom-gallery-rendering.html.twig');
                $responseParameters->set('templatePath', 'backoffice/custom-gallery-rendering.html.twig');
                // dd($responseParameters);
            }
        }

        return $responseParameters;
    }

the GalleryType:

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

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Image::class,
        ]);
    }

My Twig file:

{% include '@EasyAdmin/crud/detail.html.twig' %}
<div>
    {% for image in suite.instance.gallery.images %}
        <div id="ea-lightbox-{{ image.id }}">
            <img src="{{ vich_uploader_asset(image, 'imageFile') }}" alt="{{ image.imageName }}">
        </div>
    {% endfor %}
</div>

If you need more information please ask me !

0

There are 0 best solutions below