generate a FormView
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
59
core/lib/Thelia/Form/BaseForm.php
Normal file
59
core/lib/Thelia/Form/BaseForm.php
Normal file
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
/*************************************************************************************/
|
||||
/* */
|
||||
/* Thelia */
|
||||
/* */
|
||||
/* Copyright (c) OpenStudio */
|
||||
/* email : info@thelia.net */
|
||||
/* web : http://www.thelia.net */
|
||||
/* */
|
||||
/* This program is free software; you can redistribute it and/or modify */
|
||||
/* it under the terms of the GNU General Public License as published by */
|
||||
/* the Free Software Foundation; either version 3 of the License */
|
||||
/* */
|
||||
/* This program is distributed in the hope that it will be useful, */
|
||||
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
|
||||
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
|
||||
/* GNU General Public License for more details. */
|
||||
/* */
|
||||
/* You should have received a copy of the GNU General Public License */
|
||||
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
/* */
|
||||
/*************************************************************************************/
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,29 @@
|
||||
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
/* */
|
||||
/*************************************************************************************/
|
||||
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";
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,9 @@ An image from asset directory :
|
||||
<div>
|
||||
{intl l='An internationalized string'}
|
||||
</div>
|
||||
|
||||
{form name="thelia.customer.creation"}
|
||||
{$form.name}
|
||||
{/form}
|
||||
<div>
|
||||
jQuery data: <span id="jquery_block"></span>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user