Add FormFactoryBuilderService to Service Locator

This commit is contained in:
Eric Espie
2026-01-27 13:34:47 +01:00
parent bfa7a209d6
commit f3fddfe54e
9 changed files with 72 additions and 28 deletions

View File

@@ -30,6 +30,7 @@ use Combodo\iTop\Application\WebPage\WebPage;
use Combodo\iTop\Controller\AbstractController;
use Combodo\iTop\Forms\Block\AbstractFormBlock;
use Combodo\iTop\Forms\Block\Base\FormBlock;
use Combodo\iTop\Forms\FormBuilder\FormFactoryBuilderService;
use Combodo\iTop\Forms\Forms;
use Combodo\iTop\Forms\FormType\FormTypeHelper;
use Combodo\iTop\Service\InterfaceDiscovery\InterfaceDiscovery;
@@ -106,8 +107,7 @@ abstract class Controller extends AbstractController
/** @var Request Request (from Symfony http_foundation component @link https://symfony.com/doc/current/components/http_foundation.html) */
private Request $oRequest;
/** @var FormFactoryBuilderInterface Factory form builder (from Symfony form component @link https://symfony.com/doc/current/components/form.html) */
private FormFactoryBuilderInterface $oFormFactoryBuilder;
protected FormFactoryBuilderService $oFormFactoryBuilderService;
/** @var CsrfTokenManager Csrf manager (from Symfony form component @link https://symfony.com/doc/current/security/csrf.html) */
private CsrfTokenManager $oCsrfTokenManager;
@@ -191,12 +191,10 @@ abstract class Controller extends AbstractController
$this->bDebugForced = $this->oRequest->query->has('debug');
// Initialize the CSRF token manager
$this->oCsrfTokenManager = new CsrfTokenManager();
$this->oCsrfTokenManager = MetaModel::GetService('CsrfTokenManager');
// Initialize the form factory builder to handle Request objects
$this->oFormFactoryBuilder = Forms::createFormFactoryBuilder()
->addExtension(new HttpFoundationExtension())
->addExtension(new CsrfExtension($this->oCsrfTokenManager));
$this->oFormFactoryBuilderService = MetaModel::GetService('FormFactoryBuilderService');
}
/**
@@ -826,23 +824,6 @@ abstract class Controller extends AbstractController
return $this->oRequest;
}
/**
* Get a form builder.
* This form builder can be used to create a form or to add fields to an existing form.
*
* @api
*
* @param \Combodo\iTop\Forms\Block\AbstractFormBlock $oFormBlock
* @param mixed|null $data
*
* @return \Symfony\Component\Form\FormBuilderInterface
* @since 3.3.0
*/
public function GetFormBuilder(AbstractFormBlock $oFormBlock, mixed $data = null): FormBuilderInterface
{
return $this->oFormFactoryBuilder->getFormFactory()->createNamedBuilder($oFormBlock->GetName(), $oFormBlock->GetFormType(), $data, $oFormBlock->GetOptions());
}
/**
* @param array $aParams
* @param string $sName