create smarty function for displaying hidden form fields
This commit is contained in:
@@ -22,6 +22,7 @@
|
|||||||
/*************************************************************************************/
|
/*************************************************************************************/
|
||||||
namespace Thelia\Core\Template\Smarty\Plugins;
|
namespace Thelia\Core\Template\Smarty\Plugins;
|
||||||
|
|
||||||
|
use Symfony\Component\Form\FormView;
|
||||||
use Thelia\Form\BaseForm;
|
use Thelia\Form\BaseForm;
|
||||||
use Thelia\Core\Template\Element\Exception\ElementNotFoundException;
|
use Thelia\Core\Template\Element\Exception\ElementNotFoundException;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
@@ -57,16 +58,16 @@ class Form implements SmartyPluginInterface
|
|||||||
public function generateForm($params, $content, \Smarty_Internal_Template $template, &$repeat)
|
public function generateForm($params, $content, \Smarty_Internal_Template $template, &$repeat)
|
||||||
{
|
{
|
||||||
if ($repeat) {
|
if ($repeat) {
|
||||||
|
|
||||||
if (empty($params['name'])) {
|
if (empty($params['name'])) {
|
||||||
throw new \InvalidArgumentException("Missing 'name' parameter in form arguments");
|
throw new \InvalidArgumentException("Missing 'name' parameter in form arguments");
|
||||||
}
|
}
|
||||||
|
|
||||||
$form = new BaseForm($this->request);
|
$form = BaseForm::getFormFactory($this->request);
|
||||||
$formBuilder = $form->getFormBuilder()->createBuilder();
|
$formBuilder = $form->createBuilder('form');
|
||||||
|
|
||||||
$instance = $this->getInstance($params['name']);
|
$instance = $this->getInstance($params['name']);
|
||||||
$instance = $instance->buildForm($formBuilder, array());
|
$instance = $instance->buildForm($formBuilder, array());
|
||||||
|
|
||||||
$template->assign("form", $instance->getForm()->createView());
|
$template->assign("form", $instance->getForm()->createView());
|
||||||
} else {
|
} else {
|
||||||
return $content;
|
return $content;
|
||||||
@@ -80,18 +81,47 @@ class Form implements SmartyPluginInterface
|
|||||||
$form = $params["form"];
|
$form = $params["form"];
|
||||||
|
|
||||||
if (! $form instanceof \Symfony\Component\Form\FormView) {
|
if (! $form instanceof \Symfony\Component\Form\FormView) {
|
||||||
throw new \InvalidArgumentException("form parameter in form_render block must be an instance of
|
throw new \InvalidArgumentException("form parameter in form_field block must be an instance of
|
||||||
Symfony\Component\Form\FormView");
|
Symfony\Component\Form\FormView");
|
||||||
}
|
}
|
||||||
|
|
||||||
$template->assign("name", $form->vars["name"]);
|
$template->assign("name", $form->vars["name"]);
|
||||||
$template->assign("value", $form->vars["data"]);
|
$template->assign("value", $form->vars["value"]);
|
||||||
|
|
||||||
|
$form->setRendered();
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return $content;
|
return $content;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function formRenderHidden($params, $template)
|
||||||
|
{
|
||||||
|
$form = $params["form"];
|
||||||
|
|
||||||
|
$field = '<input type="hidden" name="%s" value="%s">';
|
||||||
|
|
||||||
|
if (! $form instanceof \Symfony\Component\Form\FormView) {
|
||||||
|
throw new \InvalidArgumentException("form parameter in form_field_hidden function must be an instance of
|
||||||
|
Symfony\Component\Form\FormView");
|
||||||
|
}
|
||||||
|
|
||||||
|
$return = "";
|
||||||
|
|
||||||
|
foreach ($form->getIterator() as $row) {
|
||||||
|
if ($this->isHidden($row)) {
|
||||||
|
$return .= sprintf($field, $row->vars["name"], $row->vars["value"]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function isHidden(FormView $formView)
|
||||||
|
{
|
||||||
|
return array_search("hidden", $formView->vars["block_prefixes"]);
|
||||||
|
}
|
||||||
|
|
||||||
public function getInstance($name)
|
public function getInstance($name)
|
||||||
{
|
{
|
||||||
if (!isset($this->formDefinition[$name])) {
|
if (!isset($this->formDefinition[$name])) {
|
||||||
@@ -109,7 +139,8 @@ class Form implements SmartyPluginInterface
|
|||||||
{
|
{
|
||||||
return array(
|
return array(
|
||||||
new SmartyPluginDescriptor("block", "form", $this, "generateForm"),
|
new SmartyPluginDescriptor("block", "form", $this, "generateForm"),
|
||||||
new SmartyPluginDescriptor("block", "form_render", $this, "formRender")
|
new SmartyPluginDescriptor("block", "form_field", $this, "formRender"),
|
||||||
|
new SmartyPluginDescriptor("function", "form_field_hidden", $this, "formRenderHidden")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,9 +86,9 @@ class TheliaLoop implements SmartyPluginInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($loopResults->valid()) {
|
if ($loopResults->valid()) {
|
||||||
|
$loopResultRow = $loopResults->current();
|
||||||
|
|
||||||
|
foreach($loopResultRow->getVarVal() as $var => $val) {
|
||||||
foreach($loopResultRow->getVarVal() as $var => $val) {
|
|
||||||
$template->assign(substr($var, 1), $val);
|
$template->assign(substr($var, 1), $val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,22 +32,18 @@ use Thelia\Model\ConfigQuery;
|
|||||||
|
|
||||||
class BaseForm {
|
class BaseForm {
|
||||||
|
|
||||||
protected $request;
|
/**
|
||||||
|
* @param Request $request
|
||||||
public function __construct(Request $request)
|
* @return \Symfony\Component\Form\FormFactoryInterface
|
||||||
{
|
*/
|
||||||
$this->request = $request;
|
public static function getFormFactory(Request $request)
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function getFormBuilder()
|
|
||||||
{
|
{
|
||||||
$form = Forms::createFormFactoryBuilder()
|
$form = Forms::createFormFactoryBuilder()
|
||||||
->addExtension(new HttpFoundationExtension())
|
->addExtension(new HttpFoundationExtension())
|
||||||
->addExtension(
|
->addExtension(
|
||||||
new CsrfExtension(
|
new CsrfExtension(
|
||||||
new SessionCsrfProvider(
|
new SessionCsrfProvider(
|
||||||
$this->request->getSession(),
|
$request->getSession(),
|
||||||
ConfigQuery::read("form.secret", md5(__DIR__))
|
ConfigQuery::read("form.secret", md5(__DIR__))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -33,7 +33,8 @@ class CustomerCreation extends AbstractType
|
|||||||
{
|
{
|
||||||
return $builder->add("name", "text")
|
return $builder->add("name", "text")
|
||||||
->add("email", "email")
|
->add("email", "email")
|
||||||
->add('age', 'integer');
|
->add('age', 'integer')
|
||||||
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -9,17 +9,17 @@ An image from asset directory :
|
|||||||
</div>
|
</div>
|
||||||
<form method="post" action="index_dev.php" >
|
<form method="post" action="index_dev.php" >
|
||||||
{form name="thelia.customer.creation"}
|
{form name="thelia.customer.creation"}
|
||||||
{form_render form=$form._token}
|
{form_field_hidden form=$form}
|
||||||
<input type="hidden" name="{$name}" value="{$value}">
|
{form_field form=$form.email}
|
||||||
{/form_render}
|
|
||||||
|
|
||||||
{form_render form=$form.email}
|
|
||||||
{intl l='email'} : <input type="text" name="{$name}">
|
{intl l='email'} : <input type="text" name="{$name}">
|
||||||
{/form_render}
|
{/form_field}
|
||||||
|
|
||||||
{form_render form=$form.name}
|
{form_field form=$form.name}
|
||||||
{intl l='name'} : <input type="text" name="{$name}">
|
{intl l='name'} : <input type="text" name="{$name}">
|
||||||
{/form_render}
|
{/form_field}
|
||||||
|
{form_field form=$form.age}
|
||||||
|
{intl l='age'} : <input type="text" name="{$name}">
|
||||||
|
{/form_field}
|
||||||
{/form}
|
{/form}
|
||||||
</form>
|
</form>
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
Reference in New Issue
Block a user