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 !