diff --git a/core/lib/Thelia/Core/DependencyInjection/Loader/XmlFileLoader.php b/core/lib/Thelia/Core/DependencyInjection/Loader/XmlFileLoader.php index baae8c487..8de39f095 100755 --- a/core/lib/Thelia/Core/DependencyInjection/Loader/XmlFileLoader.php +++ b/core/lib/Thelia/Core/DependencyInjection/Loader/XmlFileLoader.php @@ -137,7 +137,7 @@ class XmlFileLoader extends FileLoader } foreach ($forms as $form) { - $formConfig[$form->getAttributeAsPhp('name')] = $formConfig->getAttributeAsPhp('class'); + $formConfig[$form->getAttributeAsPhp('name')] = $form->getAttributeAsPhp('class'); } $this->container->setParameter('Thelia.parser.forms', $formConfig); diff --git a/core/lib/Thelia/Core/Template/Smarty/Plugins/Form.php b/core/lib/Thelia/Core/Template/Smarty/Plugins/Form.php index c994d9cfa..f9f488c3c 100644 --- a/core/lib/Thelia/Core/Template/Smarty/Plugins/Form.php +++ b/core/lib/Thelia/Core/Template/Smarty/Plugins/Form.php @@ -22,6 +22,8 @@ /*************************************************************************************/ namespace Thelia\Core\Template\Smarty\Plugins; +use Thelia\Form\BaseForm; +use Thelia\Core\Template\Element\Exception\ElementNotFoundException; use Symfony\Component\HttpFoundation\Request; use Thelia\Core\Template\Smarty\SmartyPluginDescriptor; use Thelia\Core\Template\Smarty\SmartyPluginInterface; @@ -30,11 +32,13 @@ class Form implements SmartyPluginInterface { protected $request; + protected $form; protected $formDefinition = array(); public function __construct(Request $request) { $this->request = $request; + } public function setFormDefinition($formDefinition) @@ -51,7 +55,29 @@ class Form implements SmartyPluginInterface public function generateForm($params, $content, $template, &$repeat) { + if (empty($params['name'])) { + throw new \InvalidArgumentException("Missing 'name' parameter in form arguments"); + } + $form = new BaseForm($this->request); + $formBuilder = $form->getFormBuilder()->createBuilder(); + + $instance = $this->getInstance($params['name']); + $instance = $instance->buildForm($formBuilder, array()); + + var_dump($instance->getForm()->createView()); exit; + $template->assign("form", $instance->getForm()->createView()); + + } + + public function getInstance($name) + { + if (!isset($this->formDefinition[$name])) { + throw new ElementNotFoundException(sprintf("%s form does not exists", $name)); + } + + + return new $this->formDefinition[$name]; } /** diff --git a/core/lib/Thelia/Form/BaseForm.php b/core/lib/Thelia/Form/BaseForm.php new file mode 100644 index 000000000..e16106c1b --- /dev/null +++ b/core/lib/Thelia/Form/BaseForm.php @@ -0,0 +1,59 @@ +. */ +/* */ +/*************************************************************************************/ +namespace Thelia\Form; + +use Symfony\Component\Form\Forms; +use Symfony\Component\HttpFoundation\Session\Session; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\Form\Extension\HttpFoundation\HttpFoundationExtension; +use Symfony\Component\Form\Extension\Csrf\CsrfExtension; +use Symfony\Component\Form\Extension\Csrf\CsrfProvider\SessionCsrfProvider; +use Thelia\Model\ConfigQuery; + +class BaseForm { + + protected $request; + + public function __construct(Request $request) + { + $this->request = $request; + } + + + public function getFormBuilder() + { + $form = Forms::createFormFactoryBuilder() + ->addExtension(new HttpFoundationExtension()) + ->addExtension( + new CsrfExtension( + new SessionCsrfProvider( + $this->request->getSession(), + ConfigQuery::read("form.secret", md5(__DIR__)) + ) + ) + )->getFormFactory(); + + return $form; + } +} + diff --git a/core/lib/Thelia/Form/CustomerCreation.php b/core/lib/Thelia/Form/CustomerCreation.php index e160702d5..4c70a0177 100644 --- a/core/lib/Thelia/Form/CustomerCreation.php +++ b/core/lib/Thelia/Form/CustomerCreation.php @@ -20,6 +20,29 @@ /* along with this program. If not, see . */ /* */ /*************************************************************************************/ -class CustomerCreation { +namespace Thelia\Form; +use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\FormBuilderInterface; + + +class CustomerCreation extends AbstractType +{ + + public function buildForm(FormBuilderInterface $builder, array $options) + { + return $builder->add("name", "text") + ->add("email", "email") + ->add('age', 'integer'); + } + + /** + * Returns the name of this type. + * + * @return string The name of this type + */ + public function getName() + { + return "customer creation"; + } } \ No newline at end of file diff --git a/templates/smarty-sample/index.html b/templates/smarty-sample/index.html index f93dd3876..0aa78f442 100755 --- a/templates/smarty-sample/index.html +++ b/templates/smarty-sample/index.html @@ -7,7 +7,9 @@ An image from asset directory :
{intl l='An internationalized string'}
- +{form name="thelia.customer.creation"} + {$form.name} +{/form}
jQuery data: