diff --git a/css/form-sdk/test.css b/css/form-sdk/test.css index 651413d30b..b54cb9629d 100644 --- a/css/form-sdk/test.css +++ b/css/form-sdk/test.css @@ -74,3 +74,7 @@ background-color: #e8edf9; border: none; } + +.error-label{ + color: #d32f2f; +} \ No newline at end of file diff --git a/sources/FormImplementation/Controller/TestController.php b/sources/FormImplementation/Controller/TestController.php index 78efbba50d..ef8ca6d22e 100644 --- a/sources/FormImplementation/Controller/TestController.php +++ b/sources/FormImplementation/Controller/TestController.php @@ -3,6 +3,7 @@ namespace Combodo\iTop\FormImplementation\Controller; use Combodo\iTop\Controller\AbstractAppController; +use Combodo\iTop\FormImplementation\Dto\CountDto; use Combodo\iTop\FormImplementation\Dto\ObjectSearchDto; use Combodo\iTop\FormImplementation\Helper\FormHelper; use Combodo\iTop\FormSDK\Service\FormManager; @@ -24,7 +25,7 @@ class TestController extends AbstractAppController * @throws \CoreException */ #[Route('/formSDK/test_form/', name: 'formSDK_test_form')] - public function form(Request $oRequest, FormManager $oFormManager, RouterInterface $oRouter, #[MapQueryParameter] int $mode=0): Response + public function Form(Request $oRequest, FormManager $oFormManager, RouterInterface $oRouter, #[MapQueryParameter] int $mode=0): Response { // create factory $oFactory = FormHelper::CreateSampleFormFactory($oFormManager, $oRouter, $mode); @@ -57,12 +58,41 @@ class TestController extends AbstractAppController } + #[Route('/formSDK/test/', name: 'formSDK_test')] + public function Test(Request $oRequest, FormManager $oFormManager) + { + + // get the form + $oFactory = $oFormManager->CreateFactory(); + $oFactory->AddNumberField('count1', []); + $oFactory->SetData(new CountDto()); + $oForm = $oFactory->CreateForm(); + + // handle request + $oForm->handleRequest($oRequest); + + // submitted and valid + if ($oForm->isSubmitted() && $oForm->isValid()) { + + // retrieve form data + $data = $oForm->getData(); + + return $this->redirectToRoute('app_success'); + } + + // render view + return $this->render('formSDK/form.html.twig', [ + 'form' => $oForm->createView(), + 'theme' => 'formSDK/themes/portal.html.twig' + ]); + } + /** * @throws \ArchivedObjectException * @throws \CoreException */ #[Route('/formSDK/test_theme', name: 'formSDK_test_theme')] - public function theme(Request $oRequest, FormManager $oFormManager, RouterInterface $oRouter, #[MapQueryParameter] int $mode = 0): Response + public function Theme(Request $oRequest, FormManager $oFormManager, RouterInterface $oRouter, #[MapQueryParameter] int $mode = 0): Response { // create factory $oFactory = FormHelper::CreateSampleFormFactory($oFormManager, $oRouter, $mode); @@ -88,7 +118,7 @@ class TestController extends AbstractAppController } #[Route('/formSDK/ajax_select', name: 'formSDK_ajax_select')] - public function ajax(Request $oRequest): Response + public function Ajax(Request $oRequest): Response { $oJson = file_get_contents('sources/FormImplementation/Resources/dogs.json'); $aDogs = json_decode($oJson, true); @@ -113,7 +143,7 @@ class TestController extends AbstractAppController } #[Route('/success', name: 'app_success')] - public function success(): Response + public function Success(): Response { return $this->render('formSDK/success.html.twig'); } diff --git a/sources/FormImplementation/Helper/FormHelper.php b/sources/FormImplementation/Helper/FormHelper.php index 2829e78a5c..239417a65c 100644 --- a/sources/FormImplementation/Helper/FormHelper.php +++ b/sources/FormImplementation/Helper/FormHelper.php @@ -9,6 +9,7 @@ use Combodo\iTop\FormSDK\Service\FormFactory; use Combodo\iTop\FormSDK\Service\FormManager; use DateTime; use MetaModel; +use Symfony\Component\PropertyAccess\PropertyAccess; use Symfony\Component\Routing\RouterInterface; use Symfony\Component\Validator\Constraints\Length; use Symfony\Component\Validator\Constraints\Regex; @@ -140,7 +141,7 @@ class FormHelper $oCount2 = new FormFieldDescription('count2', FormFieldTypeEnumeration::NUMBER, []); $oCount3 = new FormFieldDescription('count3', FormFieldTypeEnumeration::NUMBER, []); $oFormFactory->AddFieldSet('counts', [ - 'label' => 'Compteurs', + 'label' => 'Compteurs (from array)', 'required' => false, 'fields' => [ $oCount1, @@ -154,7 +155,10 @@ class FormHelper $oCount2 = new FormFieldDescription('count2', FormFieldTypeEnumeration::NUMBER, []); $oCount3 = new FormFieldDescription('count3', FormFieldTypeEnumeration::NUMBER, []); $oFormFactory->AddFieldSet('counts2', [ - 'label' => 'Compteurs', + 'label' => 'Compteurs (from object) need array access implementation !!!', + 'label_attr' => [ + 'class' => 'error-label' + ], 'required' => false, 'fields' => [ $oCount1, diff --git a/sources/FormSDK/Symfony/SymfonyBridge.php b/sources/FormSDK/Symfony/SymfonyBridge.php index 123a26c105..49e823a69c 100644 --- a/sources/FormSDK/Symfony/SymfonyBridge.php +++ b/sources/FormSDK/Symfony/SymfonyBridge.php @@ -38,6 +38,8 @@ use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\Form\FormInterface; +use Symfony\Component\PropertyAccess\PropertyAccess; +use Symfony\Component\PropertyAccess\PropertyAccessor; /** * Symfony implementation bridge.