diff --git a/core/Controller/Site/PageAdminController.php b/core/Controller/Site/PageAdminController.php index 18187ae..b6b73ff 100644 --- a/core/Controller/Site/PageAdminController.php +++ b/core/Controller/Site/PageAdminController.php @@ -15,6 +15,8 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Session\Session; use Symfony\Component\Routing\Annotation\Route; +use App\Core\Event\Page\PageEditEvent; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; class PageAdminController extends CrudController { @@ -50,12 +52,17 @@ class PageAdminController extends CrudController EntityManager $entityManager, RepositoryQuery $repositoryQuery, PageLocator $pageLocator, + EventDispatcherInterface $eventDispatcher, Request $request ): Response { $entity = $repositoryQuery->filterById($entity)->findOne(); + $event = new PageEditEvent($entity); + $eventDispatcher->dispatch($event, PageEditEvent::FORM_INIT_EVENT); + $this->getConfiguration()->setFormOptions('edit', [ - 'pageConfiguration' => $pageLocator->getPage(get_class($entity)), + 'page_configuration' => $pageLocator->getPage(get_class($entity)), + 'page_builder_options' => $event->getPageBuilderOptions(), ]); return $this->doEdit($entity, $entityManager, $request); diff --git a/core/Entity/Site/Page/Page.php b/core/Entity/Site/Page/Page.php index 58280fd..7d74000 100644 --- a/core/Entity/Site/Page/Page.php +++ b/core/Entity/Site/Page/Page.php @@ -140,7 +140,7 @@ class Page implements EntityInterface return $this; } - public function buildForm(FormBuilderInterface $builder) + public function buildForm(FormBuilderInterface $builder, array $options) { } diff --git a/core/Event/Page/PageEditEvent.php b/core/Event/Page/PageEditEvent.php new file mode 100644 index 0000000..afa7d3d --- /dev/null +++ b/core/Event/Page/PageEditEvent.php @@ -0,0 +1,44 @@ + + */ +class PageEditEvent extends Event +{ + const FORM_INIT_EVENT = 'page_edit_event.form_init'; + + protected Page $page; + protected array $pageBuilderOptions = []; + + public function __construct(Page $page) + { + $this->page = $page; + } + + public function getPage() + { + return $this->page; + } + + public function getPageBuilderOptions(): array + { + return $this->pageBuilderOptions; + } + + public function addPageBuilderOptions(array $options): self + { + $this->pageBuilderOptions = array_merge( + $this->pageBuilderOptions, + $options + ); + + return $this; + } +} diff --git a/core/Form/Site/Page/PageType.php b/core/Form/Site/Page/PageType.php index b6db1ad..352c740 100644 --- a/core/Form/Site/Page/PageType.php +++ b/core/Form/Site/Page/PageType.php @@ -105,7 +105,7 @@ class PageType extends AbstractType 'choices' => call_user_func(function () use ($options) { $choices = []; - foreach ($options['pageConfiguration']->getTemplates() as $template) { + foreach ($options['page_configuration']->getTemplates() as $template) { $choices[$template['name']] = $template['file']; } @@ -119,14 +119,15 @@ class PageType extends AbstractType ] ); - $builder->getData()->buildForm($builder); + $builder->getData()->buildForm($builder, $options['page_builder_options']); } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ 'data_class' => Page::class, - 'pageConfiguration' => null, + 'page_configuration' => null, + 'page_builder_options' => [], ]); } }