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

@@ -542,6 +542,7 @@ return array(
'Combodo\\iTop\\Forms\\FormBuilder\\DependencyMap' => $baseDir . '/sources/Forms/FormBuilder/DependencyMap.php',
'Combodo\\iTop\\Forms\\FormBuilder\\FormBuilder' => $baseDir . '/sources/Forms/FormBuilder/FormBuilder.php',
'Combodo\\iTop\\Forms\\FormBuilder\\FormBuilderException' => $baseDir . '/sources/Forms/FormBuilder/FormBuilderException.php',
'Combodo\\iTop\\Forms\\FormBuilder\\FormFactoryBuilderService' => $baseDir . '/sources/Forms/FormBuilder/FormFactoryBuilderService.php',
'Combodo\\iTop\\Forms\\FormBuilder\\FormHelper' => $baseDir . '/sources/Forms/FormBuilder/FormHelper.php',
'Combodo\\iTop\\Forms\\FormBuilder\\FormTypeExtension' => $baseDir . '/sources/Forms/FormBuilder/FormTypeExtension.php',
'Combodo\\iTop\\Forms\\FormBuilder\\ResolvedFormType' => $baseDir . '/sources/Forms/FormBuilder/ResolvedFormType.php',
@@ -661,6 +662,7 @@ return array(
'Combodo\\iTop\\Service\\Router\\Exception\\RouteNotFoundException' => $baseDir . '/sources/Service/Router/Exception/RouteNotFoundException.php',
'Combodo\\iTop\\Service\\Router\\Exception\\RouterException' => $baseDir . '/sources/Service/Router/Exception/RouterException.php',
'Combodo\\iTop\\Service\\Router\\Router' => $baseDir . '/sources/Service/Router/Router.php',
'Combodo\\iTop\\Service\\ServiceLocator\\NotFoundException' => $baseDir . '/sources/Service/ServiceLocator/NotFoundException.php',
'Combodo\\iTop\\Service\\ServiceLocator\\ServiceLocator' => $baseDir . '/sources/Service/ServiceLocator/ServiceLocator.php',
'Combodo\\iTop\\Service\\ServiceLocator\\ServiceLocatorException' => $baseDir . '/sources/Service/ServiceLocator/ServiceLocatorException.php',
'Combodo\\iTop\\Service\\SummaryCard\\SummaryCardService' => $baseDir . '/sources/Service/SummaryCard/SummaryCardService.php',

View File

@@ -928,6 +928,7 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f
'Combodo\\iTop\\Forms\\FormBuilder\\DependencyMap' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/DependencyMap.php',
'Combodo\\iTop\\Forms\\FormBuilder\\FormBuilder' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/FormBuilder.php',
'Combodo\\iTop\\Forms\\FormBuilder\\FormBuilderException' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/FormBuilderException.php',
'Combodo\\iTop\\Forms\\FormBuilder\\FormFactoryBuilderService' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/FormFactoryBuilderService.php',
'Combodo\\iTop\\Forms\\FormBuilder\\FormHelper' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/FormHelper.php',
'Combodo\\iTop\\Forms\\FormBuilder\\FormTypeExtension' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/FormTypeExtension.php',
'Combodo\\iTop\\Forms\\FormBuilder\\ResolvedFormType' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/ResolvedFormType.php',
@@ -1047,6 +1048,7 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f
'Combodo\\iTop\\Service\\Router\\Exception\\RouteNotFoundException' => __DIR__ . '/../..' . '/sources/Service/Router/Exception/RouteNotFoundException.php',
'Combodo\\iTop\\Service\\Router\\Exception\\RouterException' => __DIR__ . '/../..' . '/sources/Service/Router/Exception/RouterException.php',
'Combodo\\iTop\\Service\\Router\\Router' => __DIR__ . '/../..' . '/sources/Service/Router/Router.php',
'Combodo\\iTop\\Service\\ServiceLocator\\NotFoundException' => __DIR__ . '/../..' . '/sources/Service/ServiceLocator/NotFoundException.php',
'Combodo\\iTop\\Service\\ServiceLocator\\ServiceLocator' => __DIR__ . '/../..' . '/sources/Service/ServiceLocator/ServiceLocator.php',
'Combodo\\iTop\\Service\\ServiceLocator\\ServiceLocatorException' => __DIR__ . '/../..' . '/sources/Service/ServiceLocator/ServiceLocatorException.php',
'Combodo\\iTop\\Service\\SummaryCard\\SummaryCardService' => __DIR__ . '/../..' . '/sources/Service/SummaryCard/SummaryCardService.php',

View File

@@ -111,7 +111,7 @@ class DashboardController extends Controller
// Get the form block from the service (and the compiler)
$oRequest = $this->getRequest();
$oFormBlock = $this->oFormBlockService->GetFormBlockById('DashboardGrid', 'Dashboard');
$oBuilder = $this->GetFormBuilder($oFormBlock, $aViewData);
$oBuilder = $this->oFormFactoryBuilderService->GetFormBuilder($oFormBlock, $aViewData);
$oForm = $oBuilder->getForm();
$oForm->handleRequest($oRequest);
// We are in the submit action, so we submit the form with the provided values

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

View File

@@ -62,8 +62,8 @@ class TurboFormUIBlockFactory extends AbstractUIBlockFactory
{
$oFormBlockService = MetaModel::GetService('FormBlockService');
$oBlockForm = $oFormBlockService->GetFormBlockById($sDashletClass, 'Dashlet');
$oController = new FormsController();
$oBuilder = $oController->GetFormBuilder($oBlockForm, $aData);
$oFormFactoryBuilderService = MetaModel::GetService('FormFactoryBuilderService');
$oBuilder = $oFormFactoryBuilderService->GetFormBuilder($oBlockForm, $aData);
$oForm = $oBuilder->getForm();
$oTurboForm = new TurboForm($oForm->createView(), $sId);

View File

@@ -36,7 +36,7 @@ class FormsController extends Controller
// Get the form block from the service (and the compiler)
$oFormBlock = $this->oFormBlockService->GetFormBlockById($sDashletClass, 'Dashlet');
$oBuilder = $this->GetFormBuilder($oFormBlock, []);
$oBuilder = $this->oFormFactoryBuilderService->GetFormBuilder($oFormBlock, []);
$oForm = $oBuilder->getForm();
$oForm->handleRequest($oRequest);

View File

@@ -0,0 +1,55 @@
<?php
/*
* @copyright Copyright (C) 2010-2026 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
namespace Combodo\iTop\Forms\FormBuilder;
use Combodo\iTop\Forms\Block\AbstractFormBlock;
use Combodo\iTop\Forms\Forms;
use MetaModel;
use Symfony\Component\Form\Extension\Csrf\CsrfExtension;
use Symfony\Component\Form\Extension\HttpFoundation\HttpFoundationExtension;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormFactoryBuilderInterface;
use Symfony\Component\Security\Csrf\CsrfTokenManager;
/**
* Factory form builder (from Symfony form component @link https://symfony.com/doc/current/components/form.html)
*
* @since 3.3.0
*/
class FormFactoryBuilderService
{
private CsrfTokenManager $oCsrfTokenManager;
private FormFactoryBuilderInterface $oFormFactoryBuilder;
public function __construct()
{
// Initialize the CSRF token manager
$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));
}
/**
* 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
*/
public function GetFormBuilder(AbstractFormBlock $oFormBlock, mixed $data = null): FormBuilderInterface
{
return $this->oFormFactoryBuilder->getFormFactory()->createNamedBuilder($oFormBlock->GetName(), $oFormBlock->GetFormType(), $data, $oFormBlock->GetOptions());
}
}

View File

@@ -79,7 +79,7 @@ class ServiceLocator implements ContainerInterface
final public function Init(string $sRelativeConfigFileName = null): void
{
if (is_null($sRelativeConfigFileName)) {
$sConfigFile = APPROOT."sources/Service/ServiceLocator/service-locator-runtime-config.php";
$sConfigFile = APPROOT."sources/Service/ServiceLocator/service-locator-runtime.php";
} else {
$sConfigFile = APPROOT.$sRelativeConfigFileName;
}

View File

@@ -7,8 +7,10 @@
use Combodo\iTop\Application\Dashlet\Service\DashletService;
use Combodo\iTop\Forms\Block\FormBlockService;
use Combodo\iTop\Forms\FormBuilder\FormFactoryBuilderService;
use Combodo\iTop\PropertyType\PropertyTypeService;
use Combodo\iTop\Service\Cache\DataModelDependantCache;
use Symfony\Component\Security\Csrf\CsrfTokenManager;
return [
'ModelReflection' => ModelReflectionRuntime::class,
@@ -16,4 +18,6 @@ return [
'PropertyTypeService' => PropertyTypeService::class,
'DataModelDependantCache' => DataModelDependantCache::class,
'FormBlockService' => FormBlockService::class,
'CsrfTokenManager' => CsrfTokenManager::class,
'FormFactoryBuilderService' => FormFactoryBuilderService::class,
];